什麼是最好的和最快速的方法在C#中從二進制文件中刪除項目。 我有一個二進制文件,我知道我需要從位置A,B的字節數中刪除字節,該怎麼做? 謝謝從二進制文件中刪除項目
0
A
回答
0
您可能需要考慮批量工作以防止在LOH上分配,但這取決於文件的大小以及您調用此邏輯的頻率。
long skipIndex = 100;
int skipLength = 40;
using (FileStream fileStream = File.Open("file.dat", FileMode.Open))
{
int bufferSize;
checked
{
bufferSize = (int)(fileStream.Length - (skipLength + skipIndex));
}
byte[] buffer = new byte[bufferSize];
// read all data after
fileStream.Position = skipIndex + skipLength;
fileStream.Read(buffer, 0, bufferSize);
// write to displacement
fileStream.Position = skipIndex;
fileStream.Write(buffer, 0, bufferSize);
fileStream.SetLength(fileStream.Position); // trim the file
}
0
取決於...根據您的要求,有幾種方法可以做到這一點。
基本的解決方案是將源文件中的數據塊讀入目標文件,跳過必須刪除的位(是否總是隻有一個要刪除的段或多個段?)。完成後,刪除原始文件並將臨時文件重命名爲原始文件的名稱。
在這裏要記住的是,你應該傾向於更大塊而不是更小。文件的大小將決定一個合適的值。 1MB是一個很好的'默認'。
簡單的方法假定刪除和重命名新文件不成問題。如果您具有附加到文件的特定權限,或者使用了NTFS流或某些方式,則此方法無效。
在這種情況下,請複製原始文件。然後,跳到複製文件中忽略段之後的第一個字節,跳到源文件中段的起始位置,然後將字節從副本傳輸到原始位置。如果您正在使用Streams,則需要調用Stream.SetLength以將原始截斷大小改爲正確大小
+1
在原始文件中移動大塊數據時出現什麼問題? – Polity
0
如果您只想重寫原始文件並從中刪除序列,最好的方法是「重新排列「文件。
的理念是:
for i = A+1 to file.length - B
file[i] = file[i+B]
爲了獲得更好的性能,最好讀取和寫入的塊,而不是單個字節。使用不同的塊大小進行測試,以查看最適合您的目標系統的內容。
相關問題
- 1. 錯誤刪除二進制文件中的條目
- 2. 刪除二進制Java文件
- 3. 從C++中的二進制文件中刪除結構
- 4. 從二進制數據中刪除行
- 5. 從二進制文件中刪除字節
- 6. 從二進制文件中刪除字符
- 7. C#如何從二進制文件中刪除換行符?
- 8. 從二進制dll文件中刪除C++類名稱
- 9. 如何從歷史記錄中刪除二進制文件?
- 10. 如何從二進制文件中刪除特定的行?
- 11. PVCS從項目中刪除文件
- 12. 從安裝項目中刪除文件
- 13. 從JSON文件中刪除項目
- 14. 的MSBuild無法刪除二進制文件目錄
- 15. Visual Studio - 無法從網站項目中刪除二進制引用
- 16. 哪些文件可以安全地從MinGW-w64二進制文件中刪除?
- 17. 如何從ELF二進制文件中刪除程序頭文件
- 18. C++二進制文件方法是從文件中刪除內容?
- 19. 從xcode模板項目中刪除複製的文件
- 20. MSVC刪除二進制
- 21. 刪除,項目不能刪除文件
- 22. 如何從二進制MS Office文檔中刪除宏?
- 23. 如何從目標文件製作Mach-O二進制文件?
- 24. 在Visual Studio中從SVN中刪除文件非項目文件
- 25. 刪除二進制文件中的記錄?
- 26. 處理代碼中的二進制文件刪除
- 27. 永久刪除GitLab回收站中的二進制文件
- 28. 從文件第二列中刪除0.0
- 29. 如何從java中的二進制圖像文件中刪除行?
- 30. 在二進制堆中刪除
讀取第一個A字節,將它們複製到臨時文件中,跳過B字節,然後繼續將其餘文件複製到臨時文件中。完成後,將其移到原始頂部。完成。 –