Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228

Не может открыть файл для чтения

21.09.2016, 10:38. Показов 690. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему-то после закрытия не открывается файл F2? На последнем шаге программы(99 строка) срабатывает проверка:

C++
1
2
3
4
if(!F2)
  {
    cout << "Error opening F2.txt" << endl;
  }
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <fstream>
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
 
int main()
{
  char Ch1, Ch2;
  int EntryNum = 0;
  // Ищет указанную строку в файле и выводит количество её вхождений.
  ifstream F1;
  ifstream F2;
  enum FoundEntryEnum{NoFoundEntry, IsFoundEntry};
  FoundEntryEnum FoundEntry = NoFoundEntry;
  F1.open("F1.txt");
  F2.open("F2.txt");
   
  F2.get(Ch2);
  F1.get(Ch1);
  { 
    cout << "Ch2 == " << Ch2 << endl;
    cout << "Ch1 == " << Ch1 << endl;
    
    if(Ch1 == Ch2)
    {
      if(FoundEntry == NoFoundEntry)
        FoundEntry = IsFoundEntry;
      if(F2.get(Ch2))
      {
        cout << "F2.get(Ch2)" << endl;
      }
      else
      {
        //увеличиваем число вхождений
        EntryNum++;
        cout << "EntryNum++ now. EntryNum == " << EntryNum << endl;
        //перемотка файла с подстрокой
        F2.close();
        ifstream F2;
        F2.open("F2.txt");
        if(!F2)
        {
          cout << "Error opening F2.txt" << endl;
        }
        if(F2.get(Ch2))
        {
          cout << "The first character after rewriting is Ch2 == " << Ch2 << endl;
        } 
        else
        {
          cout << "No possible to read first character after rewriting"<< endl;
        }
        FoundEntry = NoFoundEntry;
      }
    } 
  }
  
  F1.get(Ch1);
  { 
    cout << "Ch2 == " << Ch2 << endl;
    cout << "Ch1 == " << Ch1 << endl;
    
    if(Ch1 == Ch2)
    {
      if(FoundEntry == NoFoundEntry)
        FoundEntry = IsFoundEntry;
      if(F2.get(Ch2))
      {
        cout << "F2.get(Ch2)" << endl;
      }
      else
      {
        //увеличиваем число вхождений
        EntryNum++;
        cout << "EntryNum++ now. EntryNum == " << EntryNum << endl;
        //перемотка файла с подстрокой
        F2.close();
        ifstream F2;
        F2.open("F2.txt");
        if(!F2)
        {
          cout << "Error opening F2.txt" << endl;
        }
        if(F2.get(Ch2))
        {
          cout << "The first character after rewriting is Ch2 == " << Ch2 << endl;
        } 
        else
        {
          cout << "No possible to read first character after rewriting"<< endl;
        }
        FoundEntry = NoFoundEntry;
      }
    } 
  }
  
  F2.close();
  F2.open("F2.txt");
  if(!F2)
  {
    cout << "Error opening F2.txt" << endl;
  }
  
  if(F2.get(Ch2))
  {
    cout << "1The first character after rewriting is Ch2 == " << Ch2 << endl;
  } 
  else
  {
    cout << "1No possible to read first character after rewriting"<< endl;
  }
 
  
  if(F2.get(Ch2))
  {
    cout << "1The second character after rewriting is Ch2 == " << Ch2 << endl;
  } 
  else
  {
    cout << "1No possible to read second character after rewriting"<< endl;
  }
 
 
  cout << "At the end. Quantity of lines's entries == " << EntryNum << endl;
  cout << "At the end. Ch2 == " << Ch2 << endl;
  F1.close();
  F2.close();
  return 0;
}
Файлы для тестирования:

F1:13212
F2:13


Но почему-то в коде, расположенном ниже, такой ошибки нет. Странно...

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
#include <fstream>
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
using std::ofstream;
 
int main()
{
  char Ch1;
  ifstream F1;
  F1.open("F1.txt");
  if(!F1)
    cout << "Error opening F1.txt" << endl;
  if(F1.get(Ch1))
    cout << "Ch1 == " << Ch1 << endl;
  if(F1.get(Ch1))
    cout << "Ch1 == " << Ch1 << endl;
  if(F1.get(Ch1))
    cout << "Ch1 == " << Ch1 << endl;
  F1.close();
  F1.open("F1.txt");
  if(!F1)
    cout << "Error opening F1.txt" << endl;
  if(F1.get(Ch1))
    cout << "Ch1 == " << Ch1 << endl;
  if(F1.get(Ch1))
    cout << "Ch1 == " << Ch1 << endl;
  if(F1.get(Ch1))
    cout << "Ch1 == " << Ch1 << endl;
  F1.close();
  return 0;
}
Файл для тестирования:

F1:123
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2016, 10:38
Ответы с готовыми решениями:

Открыть себя для чтения
добрый день. мне нужно чтобы программа открывала себя и сохраняла в массив байт. столкнулся с несовместимостью типов, прикладываю код. ...

Не может открыть файл для чтения
Почему-то после закрытия не открывается файл F2? На последнем шаге программы(99 строка) срабатывает проверка: if(!F2) { cout...

Открыть файл для чтения, а если его нет, то создать его и открыть для записи
Здравствуйте! Подскажите, как сделать программу, чтобы она открывала файл для чтения, а если его нет, то создавала его и открывала его для...

3
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
21.09.2016, 16:45
Цитата Сообщение от Дима_Кирсанов Посмотреть сообщение
F2.close(); F2.open("F2.txt");
C
1
2
F2.close();
F2.clear();
0
0 / 0 / 3
Регистрация: 12.10.2013
Сообщений: 8
24.09.2016, 15:25
У тебя в твоей проге внимательно посмотри фигурные скобки. Функция mian() - закончилась. Функция GetCh() закончилась. А затем ты ещё пишешь код - этот код к какой функции относиться?
0
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
24.09.2016, 20:51  [ТС]
Цитата Сообщение от childperun Посмотреть сообщение
У тебя в твоей проге внимательно посмотри фигурные скобки. Функция mian() - закончилась. Функция GetCh() закончилась. А затем ты ещё пишешь код - этот код к какой функции относиться?

В моей проге всё правильно, за исключением того что нужно было очищать поток F2.clear(). Всем спасибо, тема закрыта!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.09.2016, 20:51
Помогаю со студенческими работами здесь

Открыть файл только для чтения!
делаю игру и делаю как бы Топ игроков! Данные записываются в обычный Тхт файл. Как сделать чтоб при открытии этого файла можно было...

Открыть другой файл не для чтения
Как назначить на кнопку открытия другого файла, не просто чтение для программы, а что бы открыло в проводнике, к примеру: Кнопка...

Открыть файл для чтения программой по умолчанию
Process.Start(&quot;строка&quot;); работает, но нужно только для чтения открывать File.OpenRead(&quot;строка&quot;); не открывает...

Как открыть файл одновременно для чтения и для записи?
Делаю вот так, но ничего не получается.:( std::fstream inOutCredit(&quot;credit.dat&quot;, std::ios::ate | std::ios::binary); if...

Как открыть файл для чтения в БИНАРНОМ режиме?
Друзья! Файл, который надо открыть БИНАРНЫЙ, в нём два байта. Содержание файла 33 20 00 00 имя &quot;input&quot; Вот по логике...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru