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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с записью в файл, WriteFile 
:(
    Опции темы
Ksander1000
Дата 9.8.2010, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите пожайлуста с записью в файл  smile :
Код

void GoCurl()
{
    CURL *curl;
    CURLcode res;
    string html; // Тут будет html код страницы :)

    HWND hMain = FindWindowEx(0, 0, "class", "CURL"); // Описатель главного окна программы
    HWND hEdit = GetDlgItem(hMain, 2); // Описатель поля, в которое вводиться сылка
    int length;

    length = GetWindowTextLength(hEdit)+1;
    LPSTR edit_str = new CHAR[length]; 
    GetWindowText(hEdit, edit_str, length);    // Получение ссылки
    
     
    curl = curl_easy_init();
    if(curl) 
    {
        curl_easy_setopt(curl, CURLOPT_URL, edit_str);
        curl_easy_setopt(curl, CURLOPT_HEADER, 0);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &html);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
        res = curl_easy_perform(curl);

        HANDLE file = CreateFile("file.txt",
            GENERIC_READ|GENERIC_WRITE, 
            FILE_SHARE_WRITE|FILE_SHARE_READ, 
            0, 
            CREATE_NEW,
            FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
            0); // Создание файла (успешно) :)

        WriteFile(file, html.c_str(), strlen(html.c_str()), 0, 0); // А вот тут проблема :( , после выаолнения файл по прежнему пустой, и ещё она возвращает FALSE

        CloseHandle(file);

        curl_easy_cleanup(curl);
    }

    delete edit_str;
}


Это сообщение отредактировал(а) Ksander1000 - 9.8.2010, 18:54
PM MAIL   Вверх
12usver12
Дата 9.8.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



попробуй так
Код

DWORD wrtn;
WriteFile(file, html.c_str(), strlen(html.c_str()), &wrtn, 0);

PM MAIL   Вверх
Ksander1000
Дата 10.8.2010, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не помогло :(
PM MAIL   Вверх
586
Дата 10.8.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



А в переменной html вообще есть текст?

И попробуй проверять, есть ли ошибка:
Код
if(!WriteFile(file, html.c_str(), html.length(), &dwWritten, 0)) {
    TCHAR buf[128];
    _stprintf(buf, _T("Function WriteFile failed with code %u"), GetLastError());
    MessageBox(NULL, buf, _T("ERROR"), MB_ICONERROR);
}


Это сообщение отредактировал(а) 586 - 10.8.2010, 10:39
PM   Вверх
Ksander1000
Дата 10.8.2010, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проверял переменную html с помощью точки остановки, там весь код страницы.
немного подредактировал код т.к. _stprintf - идентификатор не найден:
Код

CURL *curl;
    CURLcode res;
    string html;
    char errbuf;

    HWND hMain = FindWindowEx(0, 0, "class", "CURL");
    HWND hEdit = GetDlgItem(hMain, 2);
    int length;

    length = GetWindowTextLength(hEdit)+1;
    LPSTR edit_str = new CHAR[length];
    GetWindowText(hEdit, edit_str, length);    
    DWORD nb = 0;
     
    curl = curl_easy_init();
    if(curl) 
    {
        curl_easy_setopt(curl, CURLOPT_URL, edit_str);
        curl_easy_setopt(curl, CURLOPT_HEADER, 0);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &html);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
        res = curl_easy_perform(curl);

        HANDLE file = CreateFile("C:\\file.txt",
            GENERIC_READ|GENERIC_WRITE, 
            FILE_SHARE_WRITE|FILE_SHARE_READ, 
            0, 
            CREATE_NEW,
            FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
            0);

        if(file == INVALID_HANDLE_VALUE)
            MessageBox(0, "Ошибка создания файла", "CURL", MB_OK);

        DWORD wrtn;
        if(!WriteFile(file, html.c_str(), html.length(), &wrtn, 0)) 
        {
            DWORD err = GetLastError();
            sprintf(&errbuf, "%x", err);            
            MessageBox(NULL, &errbuf, "ERROR", MB_ICONERROR);
            }
         
        CloseHandle(file);

        curl_easy_cleanup(curl);
    }

    delete edit_str;
}


Код ошибки 87

Это сообщение отредактировал(а) Ksander1000 - 10.8.2010, 11:34
PM MAIL   Вверх
GremlinProg
Дата 10.8.2010, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



FILE_FLAG_OVERLAPPED при создании файла означает, что запись и чтение этого файла будут производиться асинхронно, т.е. последний параметр у WriteFile не может быть нулевым

убери этот флаг, чтобы все работало как написано, т.е. синхронно


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Ksander1000
Дата 10.8.2010, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(GremlinProg @ 10.8.2010,  11:57)
FILE_FLAG_OVERLAPPED при создании файла означает, что запись и чтение этого файла будут производиться асинхронно, т.е. последний параметр у WriteFile не может быть нулевым

убери этот флаг, чтобы все работало как написано, т.е. синхронно

Огромное спасибо, помогло smile
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.

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


 




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


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

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