Я не мог решить эту проблему.Я не знаю, почему я получаю это сообщение об ошибке.
Исключение, выданное в 0x7642DEB5 (KernelBase.dll) в Project2.exe: 0xC0000005: Место записи нарушения прав доступа 0x00000000.
Ошибка при ReadFile(file,lpBuffer, nNumberOfBytesToRead-1, NULL, NULL)
Вот мой код.Я пытаюсь получить доступ к файлу JPG, чтобы прочитать его заголовок.
#include<Windows.h>
#include<iostream>
int main()
{
LPCTSTR path = "jpg.jpg";
DWORD nNumberOfBytesToRead;
HANDLE file = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (file == INVALID_HANDLE_VALUE)
{
std::cout << "The file couldnt be opened" << std::endl;
}
nNumberOfBytesToRead = GetFileSize(file, NULL);
BYTE *lpBuffer = new BYTE[nNumberOfBytesToRead-1] ;
if (ReadFile(file,lpBuffer, nNumberOfBytesToRead-1, NULL, NULL))
{
delete[] lpBuffer;
CloseHandle(file);
std::cout << "The file couldnt be read" << std::endl;
}
CloseHandle(file);
delete[] lpBuffer;
if (file != 0)
{
std::cout << "The file has been closed" << std::endl;
}
system("PAUSE");
return 0;
}
Спасибо, я решил эту проблему.У меня есть другая проблема
lpBuffer = 0xcccccccc Ошибка чтения символов строки.>
введите описание изображения здесь
Здесьмой новый код.
#include<Windows.h>
#include<iostream>
int main()
{
LPCTSTR path = "jpg.jpg";
DWORD nNumberOfBytesToRead = 0;
DWORD nNumberOfBytesRead = 0;
HANDLE file = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (file == INVALID_HANDLE_VALUE)
{
std::cout << "The file couldnt be opened" << std::endl;
}
nNumberOfBytesToRead = GetFileSize(file, NULL);
BYTE *lpBuffer = new BYTE[nNumberOfBytesToRead];
if (ReadFile(file, lpBuffer, nNumberOfBytesToRead, &nNumberOfBytesRead, NULL))
{
std::cout << "The file couldnt be read" << std::endl;
}
CancelIo(file);
CloseHandle(file);
delete[] lpBuffer;
system("PAUSE");
return 0;
}