Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание и запис у фаил 
:(
    Опции темы
Sergio
Дата 3.3.2007, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Создаёт но не записует у фаил. Почему?
Код

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);

PM MAIL ICQ   Вверх
bugmenot
Дата 3.3.2007, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

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



Цитата(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);

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

Это сообщение отредактировал(а) bugmenot - 3.3.2007, 01:43
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Sergio
Дата 3.3.2007, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



bugmenot,  Не записует всё равно smile 
PM MAIL ICQ   Вверх
bugmenot
Дата 3.3.2007, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

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



Щас проверил у себя, все из за FILE_FLAG_OVERLAPPED
Убери его, и все будет ОК
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Sergio
Дата 3.3.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Не очень всё хорошо 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, 14:51
PM MAIL ICQ   Вверх
Sergio
Дата 3.3.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



 smile Вот моя реалиция поставленной проблемы
Код

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

PM MAIL ICQ   Вверх
bugmenot
Дата 3.3.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

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



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

А почему 50 то?
Длина "<MSG>HEllo World!</MSG>" - 23
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Sergio
Дата 3.3.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



bugmenot,  А потому когда я использовал sizeof(msg) мне в результате давало число 4. И писало только 4 чимвола у фаил. Поэтому я отказался от этого типа(LPCVOID) и всё перевёл в чар. Смотри выше.
PM MAIL ICQ   Вверх
bugmenot
Дата 3.3.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

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



Кстати, вот здесь

Цитата(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 - массив, а не поинтер
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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