0 / 0 / 0
Регистрация: 11.09.2019
Сообщений: 4
1

ofstream не создаёт и не открывает файл

05.05.2022, 21:22. Показов 2124. Ответов 9

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Потребовалось написать программу, в которой нужно организовать запись списка в текстовый файл. Однако ofstream не хочет ни создавать новый файл, ни писать в существующий (код ниже, приведены лишь функции, которые могут касаться проблемы). Перерыл уже полинтернета, ставил разные флаги для функции open, но результат нулевой. Помогите, пожалуйста, разобраться
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <iomanip>
#include <fstream>
#include <list>
#include <string>
#include <conio.h>
#include <windows.h>
#include <random>
 
using namespace std;
 
struct sklad
{
    string tovar;
    int count = 0;
    double cena = 0;
    int nadbavka = 0;
};
 
list<sklad> read(list<sklad> array, string p);
void print(list<sklad> array);
list<sklad> add(list<sklad> slist);
list<sklad> remove(list<sklad> slist);
void search(list<sklad> slist);
void save(list<sklad> slist);
void chooseAction(list<sklad> sl);
 
list<sklad> arr;
int e = 1;
 
int main()
{
    string path;
 
    cout
        << setw(40) << "Введите полный путь к файлу" << endl;
    cin >> path;
 
    arr = read(arr, path);
    while (e == 1)
        chooseAction(arr);
}
 
list<sklad> read(list<sklad> array, string p)
{
    string str;
    sklad temp;
    ifstream in(p);
 
    if (in.is_open())
    {
        //парсинг файла
    }
    in.close();
    return array;
}
 
void save(list<sklad> slist)
{
    ofstream out;
    string a = "D:\\путь к файлу\\list.txt";
    out.open(a, ios::out | ios::trunc);
 
    if (out.is_open())
    {
        for (list<sklad>::iterator iter = slist.begin(); iter != slist.end(); iter++)
        {
            cout << iter->tovar << ", " << iter->count << ", " << iter->cena << ", " << iter->nadbavka << endl;
        }
        cout << "File saved on " + a;
        out.close();
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2022, 21:22
Ответы с готовыми решениями:

Команда fopen не создает/ не открывает файл
Папки с одинаковыми правами доступа. В одной делаю простой код: #include &lt;stdio.h&gt; #include...

Студия не создает и не открывает проекты
Здравствуйте, дело было так: У меня стояли VS 2012 и VS 2013 Экспрессовские, и тут черт меня дернул...

Составить программу, которая создает каталог, создает в нем файл, переименовывает этот файл и удаляет этот файл, а потом удаляет каталог
Составить программу, которая создает каталог, создает в нем файл, переименовывает этот файл и...

Visual studio не создает и не открывает проекты
Здравствуйте, вижуал студио перестал открывать и создавать проекты, программа не выдает ошибок....

9
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
05.05.2022, 21:30 2
Дает ли попытка открытия файла сообщение об ошибке?
0
27 / 59 / 32
Регистрация: 06.08.2020
Сообщений: 215
05.05.2022, 21:55 3
Зачем в функцию чтения передавать копию контейнера и возвращать его, если она должна читать файл?

В функции записи нужно писать в созданный out, а не cout.
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
06.05.2022, 00:00 4
Цитата Сообщение от Artemkcore Посмотреть сообщение
Однако ofstream не хочет ни создавать новый файл, ни писать в существующий (код ниже, приведены лишь функции, которые могут касаться проблемы)
Так в где запись в файл в приведенном коде?
0
0 / 0 / 0
Регистрация: 11.09.2019
Сообщений: 4
06.05.2022, 00:12  [ТС] 5
Ваше первое замечание совершенно справедливо, уже поправил

Но cout должен работать в этом случае, вот только дело до этого не доходит, проверка на то, открыт ли файл, не проходится, так как файл не создаётся либо не открывается

Добавлено через 1 минуту
Никаких ошибок или исключений при компиляции и работе не появляется
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
06.05.2022, 00:22 6
Цитата Сообщение от Artemkcore Посмотреть сообщение
проверка на то, открыт ли файл, не проходится, так как файл не создаётся либо не открывается
Ну так а путь-то такой существует? Если пути не существует, то и файл не откроется.

Цитата Сообщение от Artemkcore Посмотреть сообщение
ios::out | ios::trunc
Комбинация избыточна. Достаточно просто ios::out. А так как это режим по умолчанию, вообще ничего указывать не нужно.

C++
1
out.open(a);
Отдельный вопрос - что за странная манера отдельно вызывать open для открытия файла, когда есть конструктор?

C++
1
2
    string a = "D:\\путь к файлу\\list.txt";
    ofstream out(a);
0
0 / 0 / 0
Регистрация: 11.09.2019
Сообщений: 4
06.05.2022, 00:24  [ТС] 7
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну так а путь-то такой существует?
Конечно. Путь проверен десятки раз, все слэши экранированы

Добавлено через 1 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Комбинация избыточна. Достаточно просто ios::out. А так как это режим по умолчанию, вообще ничего указывать не нужно.
Я понимаю, что это скорее всего так, но это лишь один из множества испробованных вариантов
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
06.05.2022, 00:29 8
Цитата Сообщение от Artemkcore Посмотреть сообщение
Конечно. Путь проверен десятки раз, все слэши экранированы
Ну а если убрать нафиг путь из имени файла (то есть оставить только "list.txt" - пусть создается в текущем рабочем каталоге), то что тогда?
0
0 / 0 / 0
Регистрация: 11.09.2019
Сообщений: 4
06.05.2022, 00:50  [ТС] 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну а если убрать нафиг путь из имени файла (то есть оставить только "list.txt" - пусть создается в текущем рабочем каталоге), то что тогда?
Да всё та же песня, не работает
0
6091 / 3449 / 1402
Регистрация: 07.02.2019
Сообщений: 8,772
06.05.2022, 00:59 10
Artemkcore, там либо нет прав для записи на диск, либо ты что-то не так делаешь
Скомпилируй и запусти этот пример, скажи какой будет вывод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
 
void write(const char* name)
{
  std::ofstream out(name);
  out << 12345;
}
 
void read(const char* name)
{
  std::ifstream in(name);
  int i = 0;
  in >> i;
  std::cout << i << '\n';
}
 
int main()
{
  write("test.txt");
  read("test.txt");
}
0
06.05.2022, 00:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2022, 00:59
Помогаю со студенческими работами здесь

Не открывает и не создает базу OpenOffice 4.1 (Java Jre)
Добрый день, привет всем! Запускаю OpenOffice 4.1, выбираю создать новую базу данных, а она...

Матлаб не создает новые переменные,не открывает м-файлы
На экран выдает ошибки ??? Undefined function or method 'workspacefunc' for input arguments of...

Acronis не открывает *.tib файлы, которые сам же и создаёт?
Так-то не смешно уже. Сам создал, а открыть не может. Но всё по порядку. Накрылся комп, цель-...

В папке OC создает подпапку 1, в которой создает текстовые файлы 1txt, 2txt Затем переименовывает файл 1txt в 3
bat в папке OC создает подпапку 1, в которой создает текстовые файлы 1.txt, 2.txt. Затем...

Вирус устанавливает программы, создает ярлыки, постоянно открывает браузер Амиго и вкладки с рекламой
Добрый день! скачала какой-то вирус, который постоянно устанавливает программы на компьютер,...

Написать bat-файл, который создает bat-файл, который создает текстовый файл :)
Необходимо составит bat файл, который создаст bat файл и в созданном новом bat файле создастся...

Не подключается заголовочный файл <ofstream>
Не понимаю, что не так с работой с файлами. Подскажите где ошибка и как исправить, пожалуйста....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru