Я запустил новый проект с типом приложения Windows Forms и поместил два текстовых поля (textbox1 и textbox2) и кнопку. Я использовал OpenFileDialog, чтобы выбрать файл из системы и поместить его путь в textbox1, я поместил следующий код для кнопки:
HANDLE hFile;
HANDLE hMap ;
LPVOID base;
hFile = ::CreateFile((LPCWSTR)Marshal::StringToHGlobalAnsi(this->textBox1->Text).ToPointer(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING , FILE_FLAG_SEQUENTIAL_SCAN, 0);
unsigned long sifi= ::GetFileSize(hFile,NULL);
if(hFile !=INVALID_HANDLE_VALUE){
hMap= ::CreateFileMapping(hFile, 0, PAGE_READONLY | SEC_COMMIT, 0, 0, 0);//create Mem mapping for the file in virtual memory
}
if( hMap!=NULL){
base = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);//load the mapped file into the RAM
}
this->textBox2->Text=sifi.ToString();
Что я пытаюсь сделать с этим кодом - это прочитать путь к файлу из textbox1, чтобы использовать его для открытия дескриптора файла, а затем получить размер файла и поместить его в textbox2. Проблема в том, что textbox2 показывает неверное значение размера файла. Кажется, всегда как 4294967295 для всех файлов!
Edit:
Спасибо, ребята, я решил проблему. Это было в первом параметре CreateFile, это должно быть:
(LPCWSTR)Marshal::StringToHGlobalUni(this->textBox1->Text).ToPointer()