我遇到过一种罕见的情况,即文件在写入后无法立即从 UNC 路径读取。以下是工作流:
- plupload 将一个大文件以块的形式发送到 WebAPI 方法
- 方法将区块写入 UNC 路径(存储服务器)。这将循环,直到文件完全上传。
- 经过一些其他操作后,相同的方法尝试再次读取文件,有时找不到文件
它似乎只发生在我们的服务器空闲一段时间后。如果我重复上传几次,它就会开始工作。
我认为这可能是网络配置问题,或者与文件在再次读取之前未完全关闭有关。
这是写入文件的部分代码(在这种情况下文件流可以吗?
SaveStream(stream, new FileStream(fileName, FileMode.Append, FileAccess.Write));
下面是 SaveStream 定义:
private static void SaveStream(Stream stream, FileStream fileStream)
{
using (var fs = fileStream)
{
var buffer = new byte[1024];
var l = stream.Read(buffer, 0, 1024);
while (l > 0)
{
fs.Write(buffer, 0, l);
l = stream.Read(buffer, 0, 1024);
}
fs.Flush();
fs.Close();
}
}
下面是读取该文件的代码:
var fileInfo = new FileInfo(fileName);
var exists = fileInfo.Exists;
返回假的是fileInfo.Exists
。
谢谢
这类错误主要是由于文件尚未关闭。尝试将文件名传递给 SaveStream,然后按如下方式使用它:
private static void SaveStream(Stream stream, string fileName)
{
using (var fs = new FileStream(fileName, FileMode.Append, FileAccess.Write))
{
var buffer = new byte[1024];
var l = stream.Read(buffer, 0, 1024);
while (l > 0)
{
fs.Write(buffer, 0, l);
l = stream.Read(buffer, 0, 1024);
}
fs.Flush();
} // end of using will close and dispose fs properly
}