Форум программистов, компьютерный форум CyberForum.ru

Почему поток записи в файл wofstream ничего не пишет? - C++

Восстановить пароль Регистрация
 
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
23.02.2013, 14:16     Почему поток записи в файл wofstream ничего не пишет? #1
VisualStudio2012, Win7x64Prof

Если запись в файл производить в той же функции, где созданы объекты потоков, то запись происходит нормально. Но если потоки создать отдельно, а потом передавать их в качестве параметров в функцию, то запись не производится, а после метода close() устанавливается флаг ошибки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
int Fill(std::wofstream *const pfw_S, std::wofstream *const pfw_P)
{
    //создадим ссылку на файл, чтобы попробовать разными способами
    std::wofstream& fw_S = *pfw_S;
 
    //вверху для красоты добавим пустую строчку
    fw_S << std::endl;
    fw_S << L"Привет!" << ';' << L"Ура!" << ';';
 
    *pfw_P << std::endl;
    *pfw_P << L"Привет!" << ';' << L"Ура!" << ';';
 
        fw_S.flush();
    pfw_P->flush();
 
    return 1;
}
 
void MyFunc()
{
    wchar_t ResultPath_S[MAX_PATH];
    wcscat_s(ResultPath_S, L"G:\\S.csv");
    
    std::wofstream fw_S(ResultPath_S, std::ios::out, _SH_DENYRW);
    if(!fw_S) {MyWindows::MessageBox(L"Ошибка: Не смогли открыть файл на запись!"); throw ID_ERROR_fstream_open;}
 
    wchar_t ResultPath_P[MAX_PATH];
    wcscat_s(ResultPath_P, L"G:\\P.csv");
 
    std::wofstream fw_P(ResultPath_P, std::ios::out, _SH_DENYRW);
    if(!fw_P) {MyWindows::MessageBox(L"Ошибка: Не смогли открыть файл на запись!"); throw ID_ERROR_fstream_open;}
    
 
    //вызовем заполняющую функцию
    if(Fill(&fw_S, &fw_P) != 1) return;
 
        fw_S.close();
    if(!fw_S) 
    {
        /*!!! Попадаем сюда*/
        int f = 1;
    }
 
    fw_P.close();
    if(!fw_P) 
    {
        /*!!! Попадаем сюда*/
        int f = 1;
    }
}
В файлах пусто! Нет никаких записей.

Где ошибка?

Добавлено через 8 минут
UPDATE: В функции MyFunc() надо разумеется использовать "wcscpy_s" вместо "wcscat_s"

Добавлено через 1 час 33 минуты
Решил!
Оказалось, что запись в файл надо делать без префикса L:

C++
1
fw_S << "Привет!" << ';' << "Ура!" << ';';
Тогда все работает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2013, 14:16     Почему поток записи в файл wofstream ничего не пишет?
Посмотрите здесь:

Зачем закрывать поток при записи в файл? C++
Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции. C++
Не могу понять почему в файл OUTPUT.TXT ничего не записывается C++
ошибка в программе dev c++ пишет что-то на манеру:"нельзя будет откомпилировать ничего " C++
Почему ничего не выводит? C++
почему пишет требуется идентификатор? C++
Почему не пишет файл? C++
Передача сообщения в поток для послед. записи в файл C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru