Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вызов конструктора текущего типа http://www.cyberforum.ru/cpp-beginners/thread792968.html
Как сделать? В шарпе можно так class MyClass { public int A,B; MyClass(int a, int b) { A = a; B = b; }
C++ Функция strcmp В каком файле посмотреть функцию strcmp? В string.h смотрел и там ничего не нашел. В string тоже нет. Точнее в string.h есть, но там только один заголовок а самой функции нет. http://www.cyberforum.ru/cpp-beginners/thread792960.html
Как освободить состояние потока ? C++
Здравствуйте. Нужна помощь. Вот небольшая часть моей программы int nr_block; while (true) if (cin>>nr_block,cin.good()) { cout<<"It's OK "<<'\n'; break; } else {
C++ Разработайте программу, которая преобразует введенное с клавиатуры дробное число в денежный формат
Разработайте программу, которая преобразует введенное с клавиатуры дробное число в денежный формат. Например, число 12,5 должно быть преобразовано к виду 12 руб. 50 коп.
C++ Проверить программу с linked list http://www.cyberforum.ru/cpp-beginners/thread792925.html
Есть программа, но уверен много недочётов - сам не вижу. Например, правильно ли описаны private member? Так же не понятно с VALUE SEMANTICS - Assignments и the copy constructor. Подскажите,...
C++ Очистка памяти Подскажите пожалуйста что не так делаю, создаю массив лейблов: TLabel **Labels; Labels = new TLabel*; for(int i = 0; i < rabot + 2; i++) { Labels = new TLabel(Form1); Labels->Parent... подробнее

Показать сообщение отдельно
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23

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

23.02.2013, 14:16. Просмотров 731. Ответов 0
Метки (Все метки)

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 << "Привет!" << ';' << "Ура!" << ';';
Тогда все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.