Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: heed   (05.12.2009 в 01:23)
хотел как-то для красоты использовать GetLastError() с блоками __try{}, но не получилось сообщения "Операция успешно завершена", если перезаписівается существующий файл
#include "windows.h"
int ShowErrorMessagechar*);

int main(void)
{
 UINT flag, nBytesRead, nBytesWritten; //
 HANDLE* hinfile, houtfile; //(HANDLE)-1
 char* buff; // буфер 

START_PROGRAM:
__try{
 flag = 0;
 hinfile = CreateFile(
"D:\\Bootfont.bin"
, GENERIC_READ // open for reading
, FILE_SHARE_READ // share for reading
, NULL // default security
, OPEN_EXISTING // existing file only
, FILE_ATTRIBUTE_NORMAL // normal file
, NULL); 
 if (hinfile == INVALID_HANDLE_VALUE) __leave;
 flag++;
 houtfile = CreateFile("d:_zzz.txt"
, GENERIC_READ |GENERIC_WRITE
, 0 // do not share 
// , FILE_SHARE_READ |FILE_SHARE_WRITE
, NULL
, CREATE_ALWAYS // перезапишет существующий тоже
, FILE_ATTRIBUTE_NORMAL
, NULL);
 if (houtfile == INVALID_HANDLE_VALUE) __leave;
 flag |= 2;
 buff = VirtualAlloc( 0, 1024, MEM_COMMIT, PAGE_READWRITE); //выделение памяти
 if (buff == NULL)  __leave;
 flag |= 4;
 do {
 ifReadFile(hinfile, buff
, 1023,  &nBytesRead, 0) == 0) __leave;
ifWriteFile(houtfile, buff, nBytesRead, 
&nBytesWritten, 0) == 0) __leave;
 } while  (nBytesRead == 1023);
// 
}

__finally {

if (flag & 1) CloseHandle(hinfile);
if (flag & 2) CloseHandle(houtfile);
if (flag & 4) VirtualFree(buff, 1024, MEM_DECOMMIT);
 if ( ShowErrorMessage("можно повторить") == IDRETRY) goto START_PROGRAM;
}
 return 0;
}

int ShowErrorMessagechar* txt ) { // GetLastError()
 char* lpBuffer;
 int err  = GetLastError();
 char* szBuf = (char*) LocalAlloc(LPTR, 100); //выделение памяти
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM
,0, err, LANG_NEUTRAL, (LPTSTR)&lpBuffer,1024,0);
wsprintf(szBuf,
        "код:%#08lx  %s", err, txt); 
err = MessageBox(0, lpBuffer, szBuf
, MB_ICONERROR |MB_RETRYCANCEL |MB_DEFBUTTON2);

LocalFree(lpBuffer); //освобождение памяти
LocalFree(szBuf); //освобождение памяти
 return err;
}


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: