0

我遇到了一种罕见的情况,即文件在写入后无法立即从 UNC 路径中读取。这是工作流程:

  1. plupload 将大文件分块发送到 WebAPI 方法
  2. 方法将块写入 UNC 路径(存储服务器)。这会循环直到文件完全上传。
  3. 经过几次其他操作后,相同的方法尝试再次读取文件,有时找不到文件

它似乎只在我们的服务器空闲一段时间后才会发生。如果我重复上传几次,它就会开始工作。

我认为这可能是网络配置问题,或者与文件在再次读取之前未完全关闭有关。

这是写入文件的部分代码(在这种情况下文件流可以吗?)

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是返回错误的那个。

谢谢

4

1 回答 1

1

这类错误主要是由于文件尚未关闭。尝试将文件名传递给 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
}
于 2013-09-25T20:17:41.050 回答