2011-12-17 38 views
4

我需要在U盤(FAT16或FAT32)上做一個完整的格式,將一個文件放在驅動器上,然後刪除它並使用C程序恢復文件。如何獲取直接訪問C中的原始HD數據?

任何人都可以給我一個暗示,我應該用什麼來完成這個?

我瞭解FAT16/32文件系統的佈局,問題是我不知道如何使用C訪問原始HD數據(因爲我不能使用像fopen或mmap之類的東西,因爲文件不是'在那裏了)。

+0

我已經設置了一個類似的問題[CreateFile:直接寫入操作原始磁盤「訪問被拒絕」 - Vista,Win7](http://stackoverflow.com/q/8694713/341970)賞金。你可以幫幫我嗎? – Ali 2012-01-03 20:37:50

回答

8

這是高度操作系統特定的。

對於Linux,您將打開原始設備/dev/sdxx。請注意,有特權管理。

對於Windows,你會使用類似:

HANDLE h = CreateFile ("\\\\.\\PhysicalDriveX", GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, 
        OPEN_EXISTING, 
        FILE_FLAG_NO_BUFFERING | FILE_FLAG_RANDOM_ACCESS, 
        NULL); 

其中X取決於設備。

2

只需在磁盤設備上使用正常的文件系統操作即可。

這意味着您需要首先識別磁盤設備,當然。但一旦打開,你甚至可以mmap()它。

+0

感謝您的幫助! – 2011-12-18 17:17:09