我想通過使用所有的空白空間使一個ntfs磁盤不可寫。有沒有一種方法可以創建一個文件並將文件大小設置爲磁盤的最大大小,然後將其重置爲較小值以使其再次可寫入?如果不是什麼是創建文件的最快方式?我正在使用delphi。同樣需要刪除它的最快方法。謝謝。最快的方式來創建一個大文件和最快的方式來刪除它
1
A
回答
2
您可以創建TFileStream
並使用其Size
屬性設置其大小。事情是這樣的......
var
F: TFileStream;
begin
F:= TFileStream.Create('C:\BigFile', fmCreate);
try
F.Size:= 50000000000;
finally
F.Free;
end;
這將創建一個文件C:\BigFile
大小爲46GB左右。
您仍然必須根據可用空間量來計算要創建的文件的大小。請記住,這實際上並不寫入任何數據,它僅指示文件系統該文件具有一定的大小。
要刪除的文件,只需做同樣只設置大小爲0 ...
var
F: TFileStream;
begin
F:= TFileStream.Create('C:\BigFile', fmCreate);
try
F.Size:= 0;
finally
F.Free;
end;
DeleteFile('C:\BigFile');
編輯
在我的大文件測試中,我意識到你必須使用Int64
而不是Integer
以適應這些大尺寸。
還要記住有文件不斷變化,特別是在Windows系統驅動器上。即使連續調用DiskFree
和TFileStream.Size
,也可能會導致磁盤空間不足。我建議寫一個例如比可用空間小100MB的文件,然後一次添加1MB,直到失敗,然後每次添加1KB,直到失敗,然後每次添加1個字節,直到失敗。然後你就會知道你可以保證所有的空間都是在沒有提出任何錯誤而完全失敗的情況下進行的。
這將像這樣的東西開始...
var
F: TFileStream;
begin
F:= TFileStream.Create(FILENAME, fmCreate);
try
F.Size:= DiskFree(3) - (1024 * 1024 * 100);
while 1 = 1 do begin
try
F.Size:= F.Size + (1024 * 1024);
except
Break;
end;
end;
while 1 = 1 do begin
try
F.Size:= F.Size + 1024;
except
Break;
end;
end;
while 1 = 1 do begin
try
F.Size:= F.Size + 1;
except
Break;
end;
end;
finally
F.Free;
end;
注意這可以更好地構建(據錯誤處理),但是這應該給你一個良好的開端。
相關問題
- 1. 最快的方式來寫大文件
- 2. 什麼是最快的方式來查找和刪除文件?
- 3. 最佳(最快)的方式來解析和修改文件
- 4. 創建大文件的最快方法?
- 5. Python最快的方式來讀取大文本文件(幾GB)
- 6. 最快的方式來更新TListView
- 7. 最快的方式來實現我這
- 8. 最快的方式來發現LAN
- 9. 最快的方式來讀取和寫入文件的數據?
- 10. 在.NET中創建文件的最快,最有效的方式
- 11. 最快的方式來創建一個std :: vector的副本減一個元素
- 12. 什麼是最快和最有效的方式來批量刪除hbase記錄
- 13. 最快方式
- 14. 最快方式
- 15. 最快方式
- 16. 最快的方式
- 17. 最快的方式
- 18. 最快的方式
- 19. 最快的方式
- 20. 最快的方式
- 21. 最快的方式
- 22. 最快的方式
- 23. 最快的方式
- 24. 最快的方式
- 25. 最快的方式
- 26. 最快的方式
- 27. 最快的方式
- 28. 最快的方式
- 29. 最快的方式
- 30. 最快的方式
只是好奇:將有什麼可能的用途? –