2011-05-14 44 views
0

請給我一個可用於將流寫入文件的好方法。通過64K將大流寫入C#.Net 64K中的文件

我只需要一個簡單的c#函數,可以將流作爲輸入並執行作業。 我需要爲超大文件(即大於4GB的文件)執行此操作。

使用linq,擴展方法等可以做得更好嗎?

請爲我提供一個很好的實用功能,它還可以通過良率返回百分比進度。

編輯:我知道關於循環一個字節[]並將其寫入文件。我試過File.WriteAllBytes方法。但是,我只是在尋找一種使用linq,yield和extension方法的非常好的方法。

+0

@Ladislav,我已經有代碼從流寫入到一個文件。我的意思是我知道我們可以循環訪問這些字節並編寫它,甚至可以使用File.Write方法。 – Josh 2011-05-14 12:31:18

+0

@Oded,我需要一個使用現代技術編寫的整潔的可重用函數 – Josh 2011-05-14 12:39:26

+0

我可以知道你正在創建哪種類型的應用程序,您需要這樣的大文件 – Vir 2011-05-14 12:45:10

回答

3

編輯:這裏是一個效用函數應該做的伎倆:

更新:改變第二個參數文件名

public delegate void ProgressCallback(long position, long total); 
    public void Copy(Stream inputStream, string outputFile, ProgressCallback progressCallback) 
    { 
     using (var outputStream = File.OpenWrite(outputFile)) 
     { 
      const int bufferSize = 4096; 
      while (inputStream.Position < inputStream.Length) 
      { 
       byte[] data = new byte[bufferSize]; 
       int amountRead = inputStream.Read(data, 0, bufferSize); 
       outputStream.Write(data, 0, amountRead); 

       if (progressCallback != null) 
        progressCallback(inputStream.Position, inputStream.Length); 
      } 
      outputStream.Flush(); 
     } 
    } 
+0

@aKzenT,謝謝..但只是一件事(對不起,我忘了提及這似乎是我需要按照MSDN的文檔寫入64k 64k,以便通過WCF中的流傳輸文件來傳輸文件 – Josh 2011-05-14 12:46:47

+2

只需將緩衝區大小調整爲64k ...但是您能否告訴我您準確指向了哪一個?你有鏈接嗎? – aKzenT 2011-05-14 12:52:06

+0

引用它可以看到「假設你的服務必須接收大小高達4GB的文件並將它們存儲在本地磁盤上。假設你的內存受到限制,只能在一個緩衝區中緩衝64KB的數據時間」。它來自http://msdn.microsoft.com/en-us/library/ms733742.aspx – Josh 2011-05-14 12:57:21

相關問題