請給我一個可用於將流寫入文件的好方法。通過64K將大流寫入C#.Net 64K中的文件
我只需要一個簡單的c#函數,可以將流作爲輸入並執行作業。 我需要爲超大文件(即大於4GB的文件)執行此操作。
使用linq,擴展方法等可以做得更好嗎?
請爲我提供一個很好的實用功能,它還可以通過良率返回百分比進度。
編輯:我知道關於循環一個字節[]並將其寫入文件。我試過File.WriteAllBytes方法。但是,我只是在尋找一種使用linq,yield和extension方法的非常好的方法。
請給我一個可用於將流寫入文件的好方法。通過64K將大流寫入C#.Net 64K中的文件
我只需要一個簡單的c#函數,可以將流作爲輸入並執行作業。 我需要爲超大文件(即大於4GB的文件)執行此操作。
使用linq,擴展方法等可以做得更好嗎?
請爲我提供一個很好的實用功能,它還可以通過良率返回百分比進度。
編輯:我知道關於循環一個字節[]並將其寫入文件。我試過File.WriteAllBytes方法。但是,我只是在尋找一種使用linq,yield和extension方法的非常好的方法。
編輯:這裏是一個效用函數應該做的伎倆:
更新:改變第二個參數文件名
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();
}
}
@aKzenT,謝謝..但只是一件事(對不起,我忘了提及這似乎是我需要按照MSDN的文檔寫入64k 64k,以便通過WCF中的流傳輸文件來傳輸文件 – Josh 2011-05-14 12:46:47
只需將緩衝區大小調整爲64k ...但是您能否告訴我您準確指向了哪一個?你有鏈接嗎? – aKzenT 2011-05-14 12:52:06
引用它可以看到「假設你的服務必須接收大小高達4GB的文件並將它們存儲在本地磁盤上。假設你的內存受到限制,只能在一個緩衝區中緩衝64KB的數據時間」。它來自http://msdn.microsoft.com/en-us/library/ms733742.aspx – Josh 2011-05-14 12:57:21
@Ladislav,我已經有代碼從流寫入到一個文件。我的意思是我知道我們可以循環訪問這些字節並編寫它,甚至可以使用File.Write方法。 – Josh 2011-05-14 12:31:18
@Oded,我需要一個使用現代技術編寫的整潔的可重用函數 – Josh 2011-05-14 12:39:26
我可以知道你正在創建哪種類型的應用程序,您需要這樣的大文件 – Vir 2011-05-14 12:45:10