簡體   English   中英

C#使用FileStream將上傳的文件寫入UNC,稍后再讀取有時不起作用

[英]C# write an uploaded file to a UNC with FileStream, read it later sometimes doesn't work

我遇到了一種罕見的情況,即文件寫入后無法立即從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返回false。

謝謝

這類錯誤主要是由於文件尚未關閉。 嘗試將fileName傳遞給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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM