1

我收到此錯誤消息時,我嘗試複製大文件(〜500 MB):獲取HRESULT E_FAIL錯誤,如果拷貝大文件在Windows運行時

錯誤HRESULT E_FAIL已從調用返回一個COM組件。 HRESULT:-2147467259

這是我使用的文件複製代碼:

await file.CopyAsync(storageFolder, name, NameCollisionOption.GenerateUniqueName); 

多虧了它背後的開發商,是不是很豐富。

那麼如何解決這個問題呢?謝謝。

+1

答案可以在這裏找到: [http://stackoverflow.com/a/23866856/374075](http://stackoverflow.com/a/23866856/374075) 您需要來緩衝它 – Chris 2014-12-05 14:40:33

+0

這兩種方法都使用緩衝區,CopyToAsync只是讓我們設置內部緩衝區的大小。 TBH我不知道爲什麼緩衝區大小在默認情況下(我相信大約20 KB左右,但不確定)拋出異常,並且該方法是異步的。我會小心設置內部緩衝區太高。 – 2014-12-05 16:01:07

回答

1

我有1.5 GB的文件進行測試,並能複製的例外(我在的Windows Phone 8.1測試它)。手動設置內部緩衝區大小似乎可以解決問題,但請注意這會影響應用程序。 Read under the Buffer section on MSDN on dealing with large data sets.

的CreateNewFileAsync()方法簡單地創建一個新的文件:

祝您好運和快樂編碼。

var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
var file = await folder.GetFileAsync("largeFile.txt"); 

StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder; 

// Exception 
if (file != null) 
{ 
    StorageFile copiedFile = await file.CopyAsync(tempFolder, "copied.txt", NameCollisionOption.GenerateUniqueName); 
} 


// Setting the internal buffer to 1024 
// Be aware- from MSDN: However, this buffer is allocated on the large object heap 
// and could potentially degrade garbage collection performance. 
// You should only use large buffer sizes if it will noticeably improve the performance of your app. 
var newFile = await CreateNewFileAsync(); 

using (Stream ss = await file.OpenStreamForReadAsync()) 
using (Stream sd = await newFile.OpenStreamForWriteAsync()) 
{ 
    await ss.CopyToAsync(sd, 1024); 
    var fileProps = await file.GetBasicPropertiesAsync(); 
    var size = fileProps.Size; 
} 
+0

這樣我們創建一個新文件並複製流。我不確定文件的屬性和元數據是否會保留,我會檢查它。謝謝。 – user3293835 2014-12-05 15:45:14

+0

我只是簡單地使用元數據來設置斷點並確認所有內容都已被複制 - 如果不需要它,請將其刪除。您需要將該文件複製到另一個文件中,並且使用這個大小的文件,我不想將它保留在內存中。上面代碼中的第二種方法與第一種方法相同,不同之處在於內部緩衝區大小已更改。 – 2014-12-05 15:58:04

+0

謝謝鳶尾花。據我所知,StorageFile只是一個指向實際文件的指針,所以我們沒有內存中的大文件。 CopyAsync()方法失敗的原因尚不清楚。感謝您的幫助,這是有效的。 – user3293835 2014-12-05 16:16:44

相關問題