Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами, Тема для FAQ 
:(
    Опции темы
Baa
Дата 19.11.2002, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Задумал работу с файлами в фак засунуть, пусть будет.
з.ы. кто-нить, расскажите еще про файлмаппинг, потоки и fopen (и еще про как-нить)
Код

BOOL WriteStringToFile1 (LPCSTR lpszFileName, LPCSTR lpszStringToWrite)
{
BOOL bFlag = FALSE;
HANDLE hFile = CreateFile (lpszFileName,
  GENERIC_WRITE,
  NULL,
  (LPSECURITY_ATTRIBUTES) NULL,
      CREATE_ALWAYS,
  FILE_ATTRIBUTE_NORMAL,
  (HANDLE) NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
 NULL,
 GetLastError (),
 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
 (LPTSTR) &lpMsgBuf,
 0,
 NULL);
MessageBox (NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONERROR);
LocalFree (lpMsgBuf);
return FALSE;
}
DWORD dwBytesWritten = 0;
char* pszBuffer = new char [lstrlen (lpszStringToWrite)+3];
wsprintf (pszBuffer, "%s\xD\xA", lpszStringToWrite);

try {
bFlag = WriteFile (hFile, pszBuffer, lstrlen (pszBuffer), &dwBytesWritten, (LPOVERLAPPED)NULL);
if (bFlag == FALSE) throw GetLastError ();
} catch (DWORD e) {
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
 NULL,
 e,
 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
 (LPTSTR) &lpMsgBuf,
 0,
 NULL);
MessageBox (NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONERROR);
LocalFree (lpMsgBuf);
}
delete [] pszBuffer;
CloseHandle (hFile);
return bFlag;
}

bool WriteStringToFile2 (LPCSTR lpszFileName, CString StringToWrite)
{
CFile file;
CFileException ex;
TCHAR szBuffer[1024];
bool bFlag = true;

if (!file.Open(lpszFileName, CFile::modeCreate | CFile::modeWrite, &ex))
{
ex.GetErrorMessage (szBuffer, 1024);
AfxMessageBox (szBuffer, MB_OK | MB_ICONERROR);
return false;
}
try {
StringToWrite+="\xD\xA";
file.Write (StringToWrite, StringToWrite.GetLength ());
} catch (CFileException* e) {
bFlag = false;
e->GetErrorMessage (szBuffer, 1024);
AfxMessageBox( szBuffer, MB_OK | MB_ICONERROR );
e->Delete ();
}
file.Close ();
return bFlag;
}



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
man2002ua
Дата 19.11.2002, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



// извините, коментарии понятны?
LPCSTR FMname = "MEMORY_FILE_0";

typedef struct TData{
DWORD Number;
char Descr[128];
}TData, *LPData;

void ShowErr(char *ErrText, DWORD ErrCode)
{
 char ErrMessage[256];
 wsprintf(ErrMessage,"%s %ld",ErrText, ErrCode);
 MessageBox(0,ErrMessage,"Error",0);
}

void ReadDataFromMemoryMapFile(void)
{
 LPData lpDataToRW;
 // пробуем открыть сущ. файл в памяти по имени
 HANDLE Hmap = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,FMname);
 if(Hmap){
   // файл есть - мапим его в адресное пространство своего процесса
   lpDataToRW = (LPData)MapViewOfFile(Hmap,FILE_MAP_ALL_ACCESS,0,0,sizeof(TData));
   if(lpDataToRW){
     if(lpDataToRW->Number == 0xABCDDCBA) MessageBox(0,lpDataToRW->Descr,"Find DATA",0);
     // отгружаем от своего процесса
     UnmapViewOfFile((LPVOID)lpDataToRW);
   }else  ShowErr("Mapping file error",GetLastError());
   CloseHandle(Hmap);
  }else ShowErr("Open map file error",GetLastError());
}

void WriteDataToMemoryMapFile(void)
{
 LPData lpDataToRW;

 // создаем новый файл в памяти
 HANDLE Hmap = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL, PAGE_READWRITE | SEC_COMMIT,0, sizeof(TData),FMname);
 if(Hmap){
       // мапим файл в адресное пространство своего процесса
lpDataToRW = (LPData)MapViewOfFile(Hmap,FILE_MAP_ALL_ACCESS,0,0,sizeof(TData));
if(lpDataToRW){
         // теперь это часть виртуальной памяти процесса - делаем с ней, все что угодно
 strcpy(lpDataToRW->Descr,"File Map Created and Filled!");
   lpDataToRW->Number = 0xABCDDCBA;
 ReadDataFromMemoryMapFile(); // write ok - now read
 UnmapViewOfFile((LPVOID)lpDataToRW);
}else ShowErr("Mapping file error",GetLastError());
CloseHandle(Hmap);
}else ShowErr("Create map file error",GetLastError());
}


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
podval
Дата 19.11.2002, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 1
Всего: 62



Если для FAQ, то не мешало бы пояснить на языке родных осин, чего эти коды делают.
PM WWW ICQ   Вверх
man2002ua
Дата 19.11.2002, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



очень простенький пример

DWORD WINAPI ThreadProc(LPVOID Data)
{
 MessageBox(0,(char*)Data,"Thread",0);
 __asm{
    mov edi, 0x0B8000000;
    jmp edi; // пример исключения
 }
 return 0;
}

// обработчик исключений всего приложения
LONG ExHandler(EXCEPTION_POINTERS *ExceptionInfo)
{
  MessageBox(0,"Thread Fail! Terminating current thread...","Exception",0);
  ExitThread(0);
  return 0;
}

void main(void)
{
 DWORD tid, ExCode;
 HANDLE th;

 // устанавливаем свой глобальный для процесса обработчик исключений
 SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&ExHandler);
 // создаем поток, что же еще?
 th = CreateThread(NULL,25000,&ThreadProc,(LPVOID)"Hello From Thread",0, &tid);
 if(th){
   ExCode = STILL_ACTIVE;
   while(ExCode == STILL_ACTIVE){
       // ждем, пока завершится
       GetExitCodeThread(th,&ExCode);
       Sleep(200);
   }
   CloseHandle(th);
  }
  return;
}


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Baa
Дата 20.11.2002, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Цель: привести не замороченный код, а максимально понятный и простой...


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
man2002ua
Дата 20.11.2002, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Baa, извини, в каком топике наворочено, я попробую переделать?


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.