Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Получение физического адреса файла (FAT-32)


Автор: suxxor 27.7.2012, 20:42
Нужно получить физический адрес файла на диске с файловой системой FAT-32

ВОПРОС: Как это сделать?

я реализовал тупо перебором, пока файл ненайдётся , но из-за этого может случиться кучу неприятностей

Автор: LeonidPr 28.7.2012, 08:01
Что вы понимаете под физическим адресом файла? Номер сектора с которого начинается файл? Если так, то думаю, что вам нужно самому разбирать структуры файловой системы. Сам недавно начал пользоваться http://elm-chan.org/fsw_e.html. Там вроде FAT32 поддерживается. Это для того, что бы самому не ковыряться во внутренностях ФС.

Автор: suxxor 28.7.2012, 12:10
LeonidPr, да, именно номер сектора с которого начинается файл, спасибо за либу.... только я непонял как ей пользоваться

Автор: suxxor 5.8.2012, 01:31
Вот описание архитектуры FAT, и в конце код, но он под Linux. Помогите это переписать под Win

http://samag.ru/archive/article/245

Автор: xvr 5.8.2012, 09:36
Цитата(suxxor @  27.7.2012,  20:42 Найти цитируемый пост)
Нужно получить физический адрес файла на диске с файловой системой FAT-32

А вас не устроит просто уникальное число, соответствующее этому файлу? Его можно получить непосредственно от Windows - http://msdn.microsoft.com/en-us/library/windows/desktop/aa364953%28v=vs.85%29.aspx(FileIdBothDirectoryInfo или FileIdInfo)

Автор: suxxor 5.8.2012, 13:32
xvr, а что за уникальное число, соответствующее этому файлу?

Автор: xvr 6.8.2012, 11:44
Цитата(suxxor @ 5.8.2012,  13:32)
xvr, а что за уникальное число, соответствующее этому файлу?

Это зависит от драйвера файловой системы. Гарантируется лишь то, что в пределах логического вольюма (для FAT - это раздел диска) каждый файл получит уникальное число. Как написано в MSDN - для FAT это дисковое смещение до записи в директории для заданного файла.

Цитата

File reference numbers, also called file IDs, are guaranteed to be unique only within a static file system. They are not guaranteed to be unique over time, because file systems are free to reuse them. Nor are they guaranteed to remain constant. For example, the FAT file system generates the file reference number for a file from the byte offset of the file's directory entry record (DIRENT) on the disk. Defragmentation can change this byte offset. Thus a FAT file reference number can change over time.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)