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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Elation
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 5
#1

Не записывает в файл - C++

20.02.2013, 11:05. Просмотров 489. Ответов 10
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <list>
#include <conio.h>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <fstream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int arr[]={10,20,30,40,50};
    list<int> theList;
    for(int j=0;j<5;j++)
        theList.push_back(arr[j]);
    ofstream outfile("ITER.txt");
    ostream_iterator<int> ositer(outfile," ");
 
    copy(theList.begin(),theList.end(),ositer);
    cout<<endl;
    _getch();
    return 0;
}
В VS 2010 cоздается файл с нулевым размером. Где касяк?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.02.2013, 11:41     Не записывает в файл #2
Странно. У меня создается. Может быть не в том каталоге смотрите, или нет прав на запись (хотя тогда и не создавался бы вовсе).
Elation
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 5
20.02.2013, 12:14  [ТС]     Не записывает в файл #3
Tulosba, надо было нажать стрл+з как для окончания ввода данных для файлов(стандартный символ конца файла). Без этого у меня не работает. Хотя тут идет обычный список и должно работать без этого. Никакой логики. Может быть есть специальные настройки для среды?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.02.2013, 12:38     Не записывает в файл #4
Цитата Сообщение от Elation Посмотреть сообщение
Tulosba, надо было нажать стрл+з как для окончания ввода данных для файлов(стандартный символ конца файла). Без этого у меня не работает. Хотя тут идет обычный список и должно работать без этого. Никакой логики. Может быть есть специальные настройки для среды?
Не понимаю о чем Вы. При выходе переменной outfile из области видимости вызовется деструктор, который сделает flush и закроет файл.
Elation
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 5
20.02.2013, 12:54  [ТС]     Не записывает в файл #5
Tulosba, я не в курсе почему оно работает у меня так, но если не нажать ctr+z после компиляции файл будет нулевого размера, а если нажать: 0 байт сменяется на 15 и происходит запись.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.02.2013, 13:03     Не записывает в файл #6
Цитата Сообщение от Elation Посмотреть сообщение
не нажать ctr+z после компиляции
После компиляции или после запуска? В каком окне это делается (в среде или в консоле)?
Elation
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 5
20.02.2013, 13:14  [ТС]     Не записывает в файл #7
Tulosba, в консоле жму начать отладку
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.02.2013, 13:33     Не записывает в файл #8
Elation, Смари, старина. Ты создаешь файл. Его размер нулевой - все правильно. Далее у тебя происходит запись в этот файл. Но пока не произойдет flush - данные в файле не обновятся. У тебя стоит getch() в коде - она ждет в конце программы нажатия любой клавиши тобой и только потом вызывается деструктор для объекта файла и его размер и содержимое обновляются. Тут все работает корректно.

Вот, я добавил одну строку перед getch и по её выполнении файл обновляется, смотри код ниже:

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
#include "stdafx.h"
#include <list>
#include <conio.h>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <fstream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int arr[]={10,20,30,40,50};
    list<int> theList;
    for(int j=0;j<5;j++)
        theList.push_back(arr[j]);
    ofstream outfile("ITER.txt");
    ostream_iterator<int> ositer(outfile," ");
 
    copy(theList.begin(),theList.end(),ositer);
    cout<<endl;
    outfile.close();    // закрываем файл вручную за ненадобностью
    _getch();
    return 0;
}
Полагаю, это должно решить твою проблему
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.02.2013, 13:43     Не записывает в файл #9
ITcrusader, после выполнения программы файл будет закрыт автоматически, зачем делать close() руками? Понятно, что если пройтись по программе пошагово, файл не запишется пока не вызовется flush() (явно или неявно). Однако, если программа отработала полностью, файл должен быть создан и не пустым.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.02.2013, 13:45     Не записывает в файл #10
Tulosba, мне казалось, у Elation не полное понимание причины такого поведения, разумеется, close здесь лишний.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 13:46     Не записывает в файл
Еще ссылки по теме:

Не записывает в файл? C++
Не записывает в файл C++
Неправильно записывает в файл C++
Не записывает в файл C++
Записывает в файл не по условию C++

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

Или воспользуйтесь поиском по форуму:
Elation
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 5
20.02.2013, 13:46  [ТС]     Не записывает в файл #11
ITcrusader, теперь все корректно, спасибо за помощь.
Yandex
Объявления
20.02.2013, 13:46     Не записывает в файл
Ответ Создать тему
Опции темы

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