проецирование файла в память

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 24 Nov 2011.

  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    Всем привет.Тут возникла у меня запарка.Короче мне допустим надо прочитать весь файл,размер его не известен.Делаю только через апи.Получается readfile не подойдет,так как мы не знаем какой длинны должен быть буфер для чтения в него данных.Я подумал сделать через мэппинг файла в память.Вот что я получается делаю:
    связываюсь с файлом:
    Code:
     invoke CreateFile,addr string,GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
    mov handle,eax
    
    // маплю invoke CreateFileMapping,handle,0,PAGE_READONLY,0,0,0
    mov hMapFile,eax
     
    // проецирую его весь в память
    invoke MapViewOfFile,hMapFile,FILE_MAP_READ,0,0,0
    mov pMemory,eax
    
    
    
    а дальше мне надо каким то макаром что бы я мог сравнить строку с файлом который я проецировал,но как?извиняюсь, может тупой вопрос,но за целый день я уже не соображаю, наверное.Была идея писать его в файл и сравнивать размеры двух файлов,но имхо по моему это быдляцкий способ.
     
  2. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    кури GetFileSize
     
  3. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Очень даже подойдет. Создавай буфер стандартного размера 1024, циклом по 1024 его читай, когда вернет меньше 1024 - был последний кусок.
     
  4. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Еще есть http://msdn.microsoft.com/en-us/library/windows/desktop/aa365541(v=vs.85).aspx