Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: heed (05.12.2009 в 01:23) хотел как-то для красоты использовать GetLastError() с блоками __try{}, но не получилось сообщения "Операция успешно завершена", если перезаписівается существующий файл
#include "windows.h" int ShowErrorMessage( char*); 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 { if( ReadFile(hinfile, buff , 1023, &nBytesRead, 0) == 0) __leave; if( WriteFile(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 ShowErrorMessage( char* 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]
Сообщение:
Прикрепить: