Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Создание и запис у фаил


Автор: Sergio 3.3.2007, 01:33
Создаёт но не записует у фаил. Почему?
Код

LPCTSTR FileName = "C:\\1.txt";
       HANDLE hFile;    
 
          hFile = CreateFile(FileName,     // file to create
                   GENERIC_WRITE,          // open for writing
                   FILE_SHARE_READ,        // do not share
                   NULL,                   // default security
                   CREATE_ALWAYS,          // overwrite existing
                   FILE_ATTRIBUTE_NORMAL | // normal file
                   FILE_FLAG_OVERLAPPED,   // asynchronous I/O
                   NULL);                  // no attr. template

if (hFile == INVALID_HANDLE_VALUE) 

    printf("Could not open file (error %d)\n", GetLastError());
    return 0;
}
     DWORD dwWrite;      
      LPCVOID _msg = "Hello World!";
       WriteFile(hFile, (char*)&_msg, sizeof(_msg), &dwWrite, NULL);

Автор: bugmenot 3.3.2007, 01:42
Цитата(Sergio @  3.3.2007,  01:33 Найти цитируемый пост)
                   FILE_FLAG_OVERLAPPED,   // asynchronous I/O

Это зачем?

Цитата(Sergio @  3.3.2007,  01:33 Найти цитируемый пост)
(char*)&_msg

_msg уже поинтер, т.е. &_msg - его адрес, адрес адреса строки "Hello World!"

Цитата(Sergio @  3.3.2007,  01:33 Найти цитируемый пост)
sizeof(_msg)

А это, если я не ошибаюсь, 4, ибо _msg - LPCVOID

Значит так, насчет FILE_FLAG_OVERLAPPED не знаю, но это:
Цитата(Sergio @  3.3.2007,  01:33 Найти цитируемый пост)
       WriteFile(hFile, (char*)&_msg, sizeof(_msg), &dwWrite, NULL);

поменяй на это:
Код
WriteFile(hFile, _msg, 12, &dwWrite, NULL);

И все должно работать

Автор: Sergio 3.3.2007, 01:46
bugmenot,  Не записует всё равно smile 

Автор: bugmenot 3.3.2007, 02:17
Щас проверил у себя, все из за FILE_FLAG_OVERLAPPED
Убери его, и все будет ОК

Автор: Sergio 3.3.2007, 14:49
Не очень всё хорошо smile  Вот код:
Код

    LPCTSTR FileName = "C:\\1.xml";
       HANDLE hFile;    
 
          hFile = CreateFile(FileName,     // file to create
                   GENERIC_WRITE,          // open for writing
                   FILE_SHARE_READ,        // do not share
                   NULL,                   // default security
                   CREATE_ALWAYS,          // overwrite existing                                        
                   0,                   
                   NULL);                  // no attr. template

     DWORD dwWrite;
      
     LPCVOID msg = "<MSG>HEllo World!</MSG>"; 
      WriteFile(hFile, (char*)msg, 50, &dwWrite, NULL);

Мне у файл пишет еще и это "C:\\1.xml"  smile 
Не понимаю почему.
P.S. Как мне узнать размер msg? Sizeof результат постоянно выдаёт 4 smile 

Автор: Sergio 3.3.2007, 15:16
 smile Вот моя реалиция поставленной проблемы
Код

char msg[] = "<MSG>HEllo World!</MSG>";
   WriteFile(hFile, (char*)msg, strlen(msg), &dwWrite, NULL);

Автор: bugmenot 3.3.2007, 15:20
Цитата(Sergio @  3.3.2007,  14:49 Найти цитируемый пост)
      WriteFile(hFile, (char*)msg, 50, &dwWrite, NULL);

А почему 50 то?
Длина "<MSG>HEllo World!</MSG>" - 23

Автор: Sergio 3.3.2007, 15:24
bugmenot,  А потому когда я использовал sizeof(msg) мне в результате давало число 4. И писало только 4 чимвола у фаил. Поэтому я отказался от этого типа(LPCVOID) и всё перевёл в чар. Смотри выше.

Автор: bugmenot 3.3.2007, 15:37
Кстати, вот здесь

Цитата(Sergio @  3.3.2007,  15:16 Найти цитируемый пост)
char msg[] = "<MSG>HEllo World!</MSG>";
   WriteFile(hFile, (char*)msg, strlen(msg), &dwWrite, NULL);


Если не ошибаюсь, можно написать

Код
char msg[] = "<MSG>HEllo World!</MSG>";
   WriteFile(hFile, (char*)msg, sizeof(msg)-1, &dwWrite, NULL);


Так как msg - массив, а не поинтер

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)