Таким образом, у меня есть диск FAT, позволяет, говорят H: и каталог 'работа' (полный путь 'H:\work'). Я должен получить КОЛИЧЕСТВО первого кластера того каталога. Количество первого кластера является 2-байтовым значением, которое хранится в 26-х и 27-х байтах папки enty (ведьма - 32 байта).
Позволяет говорят, что я делаю его с файлом, НЕ каталогом. Я могу использовать код как это:
static public string GetDirectoryPtr(string dir)
{
IntPtr ptr = CreateFile(@"H:\Work\dover.docx",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
IntPtr.Zero,
OPEN_EXISTING,
0,//FILE_FLAG_BACKUP_SEMANTICS,
IntPtr.Zero);
try
{
const uint bytesToRead = 2;
byte[] readbuffer = new byte[bytesToRead];
if (ptr.ToInt32() == -1) return String.Format("Error: cannot open direcotory {0}", dir);
if (SetFilePointer(ptr, 26, 0, 0) == -1) return String.Format("Error: unable to set file pointer on file {0}", ptr);
uint read = 0; // real count of read bytes
if (!ReadFile(ptr, readbuffer, bytesToRead, out read, 0)) return String.Format("cant read from file {0}. Error #{1}", ptr, Marshal.GetLastWin32Error());
int result = readbuffer[0] + 16 * 16 * readbuffer[1];
return result.ToString();//ASCIIEncoding.ASCII.GetString(readbuffer);
}
finally
{
CloseHandle(ptr);
}
}
И это возвратит некоторое число, как 19 (довольно реальный мне, это - единственный файл на диске).
Но мне не нужен файл, мне нужна папка. Таким образом, я помещаю параметрический усилитель FILE_FLAG_BACKUP_SEMANTICS для вызова CreateFile... и не знаю, что сделать затем. Там какой-либо путь состоит в том, чтобы получить его работающий на папку?
MSDN является очень четким по этой проблеме http://msdn.microsoft.com/en-us/library/aa365258 (v=VS.85) .aspx
Это звучит мне как: "Нет никакого способа, которым можно получить первый кластер многой папки". Самая отчаянная вещь состоит в том, что в моей обучающей программе было сказано, что что-то как "Вы собирается получить это или Вас передача привычки этот курс". Истинная причина, почему он так уверен, что это возможно, состоит в том, потому что в течение 10 лет (или может быть больше) он получил первое кластерное число папки как ХЕШ адреса папки (и я был достаточно глуп указать на это на него, поэтому теперь я не могу сделать этого тот же путь),
PS: Это - большая часть spupid задачи, которую я когда-либо имел!!! Это значение действительно не используется anythere в программе, это - только fcking бессмысленное целое число.
Итак, если я правильно понимаю, вы хотите прочитать FAT и получить первый кластер каталога на диске?
Если вышесказанное верно, то, возможно, лучше открыть том для прямого доступа.
http://msdn.microsoft.com/en-us/library/aa363858 (VS.85) .aspx
См. Раздел «Физические диски и тома».
После открытия тома вы можете прочитать сектора диска и просканировать FAT, чтобы найти запись для интересующего вас каталога.
Вот пример использования DeiceIoControl для чтения геометрии диска. {{ 1}} http://msdn.microsoft.com/en-us/library/aa363147 (VS.85) .aspx