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


Автор: redpinguin 6.3.2006, 23:49
Привет всем, уже 2ой день пытаюсь накопать инфу : как узнать номер сектора где расположено начало файла по его (файла) имени.

Все что я накопал это то как можно передвигаться по секторам. но перебирать весь хард в поисках нужного файла долговато будет.

Если кто-то встречался с такой задачкой или думал на эту тему то давайте подумаем вместе.

Автор: p0s0l 7.3.2006, 00:41
Начиная с Win2k можно использовать FSCTL_GET_RETRIEVAL_POINTERS для получения № кластеров, занимаемых файлом... Количество секторов в кластере можно узнать через GetDiskFreeSpace...

Автор: redpinguin 7.3.2006, 21:57
Чего то у меня не получается никак smile

Код

    HANDLE hFile;
    CString file_name="C:\\temp.txt";

    hFile=CreateFile(file_name,FILE_READ_ATTRIBUTES,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

    if(hFile==INVALID_HANDLE_VALUE)
    {
        AfxMessageBox("ERROR CREATE FILE");
        return;
    }

    STARTING_VCN_INPUT_BUFFER StVCN; 
        StVCN.StartingVcn.QuadPart = 0; 
        DWORD BytesReturned = 0;

    BYTE * OutBuffer = NULL;
    DWORD  OutBufferSize;
    OutBufferSize =    4096;

    DeviceIoControl(hFile,FSCTL_GET_RETRIEVAL_POINTERS,&StVCN,sizeof(StVCN),OutBuffer,OutBufferSize,&BytesReturned,NULL);

    delete [] OutBuffer;


даже этот маленький кусок кода и тот не работает.
Хотя я уже и сам не сильно понимаю что он должен делать.

Если не трудно расскажи что и после чего мне надо делать, а то у меня в голове полный сумбур от информации с которой хз че делать.

Или просто скажи чот мне надо почитать (на русском, а то от ломаного английского уже ломит) чтоб прийти к этому (будет замечаельно если это будет електронный док-т);

Автор: p0s0l 9.3.2006, 10:24
Нашел примерчик на Си:
http://www.wasm.ru/article.php?article=lockfileswork
Мотай вниз до GetFileClusters

Автор: redpinguin 24.3.2006, 15:47
p0s0l огромное спасибо ты меня на несколько мыслей натолкнул )
Я этот код уже находил но как-то не внимательно просматривал )
ЗЫ thx

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