C# 使用 FileStream 将上传的文件写入 UNC,稍后读取有时不起作用

本文关键字:UNC 读取 不起作用 FileStream 使用 文件 | 更新日期: 2023-09-27 18:32:45

我遇到过一种罕见的情况,即文件在写入后无法立即从 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

谢谢

C# 使用 FileStream 将上传的文件写入 UNC,稍后读取有时不起作用

这类错误主要是由于文件尚未关闭。尝试将文件名传递给 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
}