nkorobkov
@nkorobkov

WinAPI: Нарушение прав доступа при записи. Как исправить?

Задача:
1. Проверить, есть ли в текущей директории файл Example1.txt /
2. если есть , то скопировать его в файл Mycopy.txt перед копированием проверить, что для этого файла есть место на диске.
3. Вывести на экран этот файл порциями по 2-4Кб, рассматривая этот файл как текстовой .

Мой корявый код:
#include "windows.h"
#include <iostream>

using namespace std;

int WINAPI WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow)
{
	setlocale(LC_ALL, "Russian");
	char buffer[100];
	HANDLE myfile;
	bool isSucceed;

	myfile = CreateFile(L"myfile.txt", GENERIC_READ | GENERIC_WRITE,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL, CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL, NULL);

	isSucceed = ReadFile(myfile, buffer, 10, 0, NULL);

	CloseHandle(myfile);
	if (!isSucceed) {
		return NULL;
	}
	else {
		HANDLE copy;
		copy = CreateFile(L"copy.txt", GENERIC_READ | GENERIC_WRITE,
			FILE_SHARE_READ | FILE_SHARE_WRITE,
			NULL, CREATE_ALWAYS,
			FILE_ATTRIBUTE_NORMAL, NULL);
		WriteFile(copy, buffer, 100, 0, NULL);
	}

	system("pause");
	return 0;
}


Ошибка:
df38adb2d4bb4fb3b2b35760f2953733.pngПомогите!
  • Вопрос задан
  • 613 просмотров
Решения вопроса 2
SagePtr
@SagePtr
Еда - это святое
А проверить myfile на NULL?
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
1. Ошибка в вызове ReadFile. Причём я говорил про эту ошибку.
DWORD nRead;
 isSucceed = ReadFile(myfile, buffer, 10, &nRead, NULL);


А также.
2. Файл открывать только для чтения.
3. Проверить myFile на корректность.
4. Читаем 10 байтов, пишем 100?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы