我有以下情況。我有一個大文件,說1 KB。我想讀取前100個字節,然後從文件中刪除100個字節的讀取數據,然後讀取下100個字節。要讀取100個字節是可以的,但是如何從文件中刪除100個字節?如何在Visual C++中截斷文件?
回答
這通常做一個多步驟的過程:
- 重命名原始文件。
- 將你想要的數據寫入一個帶有原始文件名的新文件。
- 使用包含不再需要的數據的臨時名稱刪除舊文件。
這樣,如果出現問題,您可以簡單地恢復您重命名的原始文件。將文件從一個地方移動到另一個地方也是這樣實施的。
但是,如果您不想這樣做,則SetEndOfFile
function是另一個可行的選項,可以在原地截斷文件的內容。從文檔:
爲指定的文件到文件指針的當前位置的物理文件的大小。
物理文件大小也被稱爲文件的結尾。
SetEndOfFile
函數可用於截斷或擴展文件。
我的理解是OP想要刪除文件開頭的數據。 「SetEndOfFile」函數可能會刪除尚未讀取的數據。 – 2011-05-17 16:52:40
@Thomas:這是可能的。我認爲自從我上次查找它之後,「truncate」這個詞的定義仍然是一樣的。無論哪種情況,我的答案的第一部分都適用。第二種方法對於那些可能想要重新設計其邏輯以在文件末尾執行更正常的截斷數據的人很有用。 – 2011-05-17 23:22:02
只有當沒有其他線程正在寫入文件或使用它時,您纔可以完成這3個步驟。 – 2011-07-14 09:06:00
那不會被稱爲截斷;該術語是指從最終而不是開始移除數據。我不知道任何可能的操作系統,除了從第100個字節開始將文件內容複製到新文件之外。
另請參閱http://blogs.msdn.com/b/oldnewthing/archive/2010/12/01/10097859.aspx,其中詳細解釋了爲什麼沒有實施。 – MSalters 2011-05-17 15:18:10
刪除已在文件中處理的數據非常耗時,並且在大多數情況下不是必需的。
刪除文件頂部或中間附近的數據需要編寫一個新文件,這需要時間和磁盤空間。大多數應用程序將讀取並處理整個文件,然後重命名文件(使用備份擴展名)。這對調試有用。刪除整個文件通常是一個更快的操作,即在不處理數據的情況下編寫新文件。
刪除只能在必要時進行。對於文件,可以存儲有效數據開始位置的偏移量,從而減少了從文件中刪除數據的需求。出於安全目的,覆蓋文件中的數據通常會更快,然後創建一個沒有處理數據的新文件。
首先嚐試編寫程序以不刪除文件中的數據。只有在程序健全並正常工作後,才能根據需要刪除。許多人建議只在沒有更多空間的情況下刪除文件。
- 1. C#截斷CSV文件#
- 2. 司長被截斷 - Visual C
- 3. Windows Phone - C# - 在IsolatedStorage中截斷文件
- 4. FindExecutable在C++中截斷文件名
- 5. c#日誌文件截斷
- 6. 在ocaml中截斷文件
- 7. 在Bash中截斷文件
- 8. 如何在C#中截斷列表?
- 9. 如何截斷在CSV文件蟒蛇
- 10. 截斷在C#
- 11. 如何檢測C#中的截斷文件
- 12. 如何在javascript中截斷Tumblr文章
- 13. Erlang文件截斷
- 14. Javascript文件被截斷
- 15. 停止截斷目標C的文件?
- 16. C++ XOR加密截斷文件
- 17. 如何在C截斷地址
- 18. 如何使open()截斷現有文件
- 19. 如何通過sudo截斷glob文件?
- 20. 如何截斷文本中的文本
- 21. 截斷文件並在Python中登錄
- 22. 如何在Visual C++中打開文件?
- 23. 如何在Visual C++中複製文件?
- 24. 如何在Visual C++中創建文件
- 25. 在TTStyledTextLabel中截斷文本
- 26. 在d3中截斷文本
- 27. 在PHP中截斷文本?
- 28. linux cron截斷大文件
- 29. HDFS和截斷文件
- 30. DBF文件名截斷
1kb不是一個大文件。它實際上是一個非常小的文件。除非您處於內存非常有限的嵌入式場景中,否則您爲何不讀取整個文件? – 2011-05-17 11:35:03