Не открывается файл ifstream c
Я пытаюсь открыть файл в своей программе, чтобы импортировать из него некоторую информацию. Соответствующая часть кода следующая:
При запуске программы выдает ошибку:
Se ha producido un error al leer los datos del aeropuerto
Это означает, что datasid или datastar не удалось.
Файлы находятся в том же каталоге, что и исходные файлы, и я проверил правильность названий.
Что такое apt ? Пути, которые вы используете в случае "LEAL", кажутся подозрительными. std::ifstream выполняет подстановку нет.
Coes ICAO == "LEAL"? Тогда путь не сработает. Установите точку останова и посмотрите.
@drescherjm Я забыл изменить пути в LEAL, но я провожу тесты с LEPA, так что это не должно иметь никакого эффекта, верно?
@ravnsgaard apt - это LEPA в случае, когда я тестирую. Да, я забыл изменить пути в LEAL, но я провожу тесты с LEPA, так что это не должно иметь никакого эффекта.
Попробуйте ./LEALSID.txt и т. д. Я видел, как в текущем каталоге нервничают. Какая ОС? Попробуйте также с полным путем. И у дрешерим здесь что-то есть. Использование current directory часто ненадежно.
Хорошо, я точно не знаю, что было не так, но я переместил все файлы программы в новый каталог, и теперь он работает. Спасибо всем!
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Решение
Очевидная проблема заключается в том, что вы, вероятно, хотели открыть файл, используя std::ofstream а не std::ifstream , Это помогает на самом деле записи в поток, хотя есть способы записи в std::ifstream до тех пор, пока он открыт для чтения. Например, вы можете использовать std::streambuf напрямую или используйте std::streambuf построить и std::ostream ,
Более интересный вопрос: почему файл не открывается для записи, когда std::ios_base::in | std::ios_base::out используется для открытого режима? std::ifstream автоматически добавляет std::ios_base::in , Оказывается, что режим std::ios_base::in | std::ios_base::out не создает файл, но он успешно открыл бы существующий файл. Если вы действительно хотите использовать std::ifstream чтобы открыть файл для вывода, который потенциально не существует, вам нужно будет использовать либо std::ios_base::out | std::ios_base::trunc или же std::ios_base::out | std::ios_base::app :
- первый вызовет создание или усечение файла, если он существует
- последнее заставит записи добавлять в файл во всех случаях
Мое личное предположение, однако, заключается в том, что вам лучше всего использовать std::ofstream или, если вы хотите открыть файл для чтения и записи std::fstream (который, однако, также должен был бы иметь std::ios_base::trunc или же std::ios_base::app добавлено для создания файла, если его нет).
Репутация: 1
Всего: 1
Здаравствуте.
Смешно такое спрашывать. Но у меня почему то не считывается файл.
В книгах смотрел, видео урок смотрел, делаю все так как там, а мне вот.
Програмка на 10 строчек, и не работает, - выводит не содержымое файла, а одно и то же число..
В чем туплю? Спасибо..
using namespace std;
int main()
ifstream datei ("file.txt");
Репутация: 52
Всего: 211
вопрос номер 1, а файл там есть? т.е. в какой он директории? на будущее, в таких случая в первую очередь пробуй указать абсолутный путь к файлу (т.е. c:\windows . )
В твоем случае проблема в запуске через Visual Studio (скорее всего), ну или какой нибудь другой IDE, при запуске current directory меняется, если очень интересно на что, выведи GetCurrentDirectory().
Репутация: 1
Всего: 1
Файл в той же директории - проверял дважды. :(
IDE CodeBlocks.
А почему директория то мняется? :(
Запускал и на Windows 7 64bit(сначало думал, что проблема в разрядности - оказывается - нет) и на 32bit.
а как вывести то.
GetCurrentDirectory.
Код |
GetCurrentDirectory(); и cout |
Репутация: 52
Всего: 211
Цитата(Killer_13 @ 20.3.2010, 16:05 ) |
Файл в той же директории - проверял дважды. :( |
в той это в которой? я же говорю, твой файл находится в папке debug/release, а IDE меняет текущую директорию на директорию проекта (кажется, не помню точно, то ли проекта, то ли солюшена, но это в студии, как там в CodeBlocks не знаю).
Цитата(Killer_13 @ 20.3.2010, 16:05 ) |
а как вывести то. GetCurrentDirectory. |
Репутация: 1
Всего: 1
Я при создании проекта ставил флажок только Debug, Release не отмечал.
using namespace std;
int main()
ifstream datei ("file.txt");
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\winbase.h|1409|error: too few arguments to function `DWORD GetCurrentDirectoryA(DWORD, CHAR*)'|
\STUDIUM\C++\Praktikum1\main.cpp|16|error: at this point in file|
Репутация: 52
Всего: 211
Цитата(Killer_13 @ 20.3.2010, 16:17 ) |
Я при создании проекта ставил флажок только Debug, Release не отмечал. |
ты не понял о чем я.. в общем поставь абсолютный путь.
Цитата(Killer_13 @ 20.3.2010, 16:17 ) |
C:\Program Files\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\winbase.h|1409|error: too few arguments to function `DWORD GetCurrentDirectoryA(DWORD, CHAR*)'| |
Код |
char dir[255]; GetCurrentDirectoryA(255, dir); std::cout |
Репутация: 1
Всего: 1
Код |
char dir[255]; GetCurrentDirectoryA(255, dir); std::cout |
Выводит папку в которой проект, все файлы и файл который я хочу прочитать..
Соственно, рабочую папку.
Цитата |
ты не понял о чем я.. в общем поставь абсолютный путь. |
и теперь тоже не понял.. не пинайте сильно.. :(
Я при создании проекта и всех файлов указывал путь где они будут сохранятся..
Может вы это имеете введу - "Свойства проекта"
Присоединённый файл ( Кол-во скачиваний: 5 )
Untitled_1.jpg 71,44 Kb
Репутация: 52
Всего: 211
Цитата(Killer_13 @ 20.3.2010, 16:29 ) |
и теперь тоже не понял.. не пинайте сильно.. :( Я при создании проекта и всех файлов указывал путь где они будут сохранятся.. |
Репутация: 1
Всего: 1
Код |
ifstream datei ("E:\\. DEUTSCHLAND. \\STUDIUM\\C++\\Praktikum1\\file.txt"); |
Вот что в итоге выводит на экран.
Присоединённый файл ( Кол-во скачиваний: 6 )
Untitled_1.jpg 42,63 Kb
Репутация: 52
Всего: 211
Цитата(Killer_13 @ 20.3.2010, 16:38 ) |
:(:(:(:( Результат тот же. :( |
Репутация: 1
Всего: 1
Присоединённый файл ( Кол-во скачиваний: 2 )
Praktikum1.rar 432,62 Kb
Репутация: 52
Всего: 211
ты находящиеся в файле данные
Добавлено через 2 минуты и 32 секунды
using namespace std;
Сделай так, с открытием файла у тебя все в порядке как оказалось.
Репутация: 1
Всего: 1
вот я затупил. - спасибо огромное, думаю вопрос решен!
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- FAQ раздела лежит здесь!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
[ Время генерации скрипта: 0.1479 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Репутация: нет
Всего: нет
Всем доброго времени! У меня есть программа, которая рисует кривую повехность, необходимо многократно посчитать время работы и результат записать в файл. Время работы считает как надо, но насчет fstream идет непрерывная ругань, мол, необъявленный идентификатор!
В fstream.h описан класс basic_fstream, пробовала заменить, результат тот же! Подскажите, что делать??
Привожу часть программы:
void CALLBACK display(void)
<
long t0 = GetTickCount();
fstream f;
f.open("file.txt",ios::out);
for (int a=0; a <
long t0 = GetTickCount();
for(int i =0; i < 100; ++i)
glRotatef(330.0, 1, 0., 0.);
glScalef (0.5, 0.5, 0.5);
>
long t1 = GetTickCount();
Репутация: 10
Всего: 33
Это пишется без .h
Добавлено через 22 секунды
Компилятор какой?
Репутация: нет
Всего: нет
Цитата |
fatal error C1083: Не удается открыть файл include: fstream: No such file or directory |
Цитата(andrew_121 @ 14.6.2009, 17:31 ) |
Компилятор какой? |
Репутация: 10
Всего: 33
Цитата(baltushka @ 14.6.2009, 17:53 ) |
Не удается открыть файл include: fstream: No such file or directory |
О как. Посмотри есть ли этот файл в c:/programm files/microsoft/vc/include. Кароче, поищи каталог include в папке куда установила VC. Так как я никогда не пользовался экспресс версиями.
Репутация: нет
Всего: нет
Честно говоря, не нашла нигде другого компилятора, который нормально бы установился и заработал! если поделитесь, буду благодарна очень!!
А насчет fstream в include - он там есть. не понимаю в чем проблема((((
Репутация: 5
Всего: 32
Посмотри в настройках IDE должны быть определены пути инклудов. В полной английской версии это Tools/Options -> Projects and Solutions -> VC++ Directories. В категории Include files нужно добавить путь до каталога с iostream, fstream etc., если, конечно, его там нет.
Репутация: нет
Всего: нет
запуталась(( что делать.
Репутация: 5
Всего: 32
Постарайся приводить код в теге code, а не цитата, а то не читается.
fstream f; замени на ofstream f;
Добавлено через 2 минуты и 11 секунд
Цитата(baltushka @ 14.6.2009, 19:29 ) |
который при попытке открыть предлагает на выбор программы |
Ну и открывай блокнотом. Все стандартные инклуды по, опять же, стандарту без расшерений, так что исправь назад))
Репутация: нет
Всего: нет
Если удалить из папки эти заголовки, он ругается на необъявленный идентификатор!!
Если удалить неопознанные файлы, ругается на отсутствие их..
Цитата(Cheloveck @ 14.6.2009, 18:32 ) |
fstream f; замени на ofstream f; |
исправила, не помогло(
Добавлено через 1 минуту и 21 секунду
Цитата(Cheloveck @ 14.6.2009, 18:32 ) |
Постарайся приводить код в теге code, а не цитата, а то не читается. |
Репутация: 5
Всего: 32
Цитата(baltushka @ 14.6.2009, 19:39 ) |
Если удалить из папки эти заголовки, он ругается на необъявленный идентификатор!! Если удалить неопознанные файлы, ругается на отсутствие их.. |
бррр. какие неопознаные? верни всё как было. В SDK нет ошибок.
Цитата(baltushka @ 14.6.2009, 19:39 ) |
исправила, не помогло( |
Лог ошибок в студию (только, прошу, верни файлы перед этим на место. Если очень сложно, то удали всё и поставь заново).
Репутация: нет
Всего: нет
Вернула!! я уже убедилась, что после ругани на отсутствие файлов, начинается ругань на неопознанность.. вот она:
Цитата |
1>------ Построение начато: проект: gltest1, Конфигурация: Debug Win32 ------ 1>Компиляция. 1>main.cpp 1>c:\projects\c++\gltest1\main.cpp(49) : warning C4244: =: преобразование 'double' в 'GLfloat', возможна потеря данных 1>c:\projects\c++\gltest1\main.cpp(50) : warning C4244: =: преобразование 'double' в 'GLfloat', возможна потеря данных 1>c:\projects\c++\gltest1\main.cpp(64) : warning C4305: инициализация: усечение из 'double' к 'GLfloat' 1>c:\projects\c++\gltest1\main.cpp(64) : warning C4305: инициализация: усечение из 'double' к 'GLfloat' 1>c:\projects\c++\gltest1\main.cpp(94) : error C2065: ofstream: необъявленный идентификатор 1>c:\projects\c++\gltest1\main.cpp(94) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "f" 1>c:\projects\c++\gltest1\main.cpp(94) : error C2065: f: необъявленный идентификатор 1>c:\projects\c++\gltest1\main.cpp(95) : error C2065: f: необъявленный идентификатор 1>c:\projects\c++\gltest1\main.cpp(95) : error C2228: выражение слева от ".open" должно представлять класс, структуру или объединение 1> тип: 'unknown-type' 1>c:\projects\c++\gltest1\main.cpp(95) : error C2653: ios: не является именем класса или пространства имен 1>c:\projects\c++\gltest1\main.cpp(95) : error C2065: out: необъявленный идентификатор 1>c:\projects\c++\gltest1\main.cpp(146) : error C2065: f: необъявленный идентификатор 1>c:\projects\c++\gltest1\main.cpp(146) : error C2065: mas: необъявленный идентификатор 1>c:\projects\c++\gltest1\main.cpp(147) : error C2065: f: необъявленный идентификатор 1>c:\projects\c++\gltest1\main.cpp(147) : error C2228: выражение слева от ".close" должно представлять класс, структуру или объединение 1> тип: 'unknown-type' 1>Журнал построения был сохранен в "file://c:\Projects\C++\gltest1\Debug\BuildLog.htm" 1>gltest1 - ошибок 11, предупреждений 4 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== |
P.s. Это не код, пишу цитатой.. =)
Репутация: 5
Всего: 32
Может, что углядишь. Это 100% работает
Добавлено через 1 минуту и 6 секунд
кстати, про пространство имён std не забыла?
Репутация: 10
Всего: 33
Цитата(baltushka @ 14.6.2009, 18:39 ) |
Если удалить неопознанные файлы |
Репутация: 5
Всего: 32
Цитата(baltushka @ 14.6.2009, 19:46 ) |
P.s. Это не код, пишу цитатой.. =) |
в твоём файле нет.
Добавлено через 1 минуту и 49 секунд
Цитата(baltushka @ 14.6.2009, 19:46 ) |
1>c:\projects\c++\gltest1\main.cpp(146) : error C2065: mas: необъявленный идентификатор |
Я, кстати, тоже не вижу объявления o_O
Репутация: нет
Всего: нет
Цитата(Cheloveck @ 14.6.2009, 18:49 ) |
Может, что углядишь. Это 100% работает |
работает! только выдает, точнее, записывает в файл совсем не то, что нужно!!
вот то, что получилось!! но нужно, чтобы проходя по первому циклу в массив добавлялось полученное значение времени!! а в итоге - документ со списком циферок, каждая из которых обозначает время выполнения программы за каждый такт, желательно, чтобы каждая циферка была с новой строки
Код |
void CALLBACK display(void) int arr[5]; for (int a=0; a std::ofstream f("file.txt"); long t0 = GetTickCount(); for(int i =0; i < 100; ++i) |
glRotatef(330.0, 1, 0., 0.);
glScalef (0.5, 0.5, 0.5);
glFlush();
auxSwapBuffers();
>;
>
long t1 = GetTickCount();
long m = t1-t0;
f
Добавлено через 1 минуту и 52 секунды
Сейчас все падает =((((
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Вопросы по реализации алгоритмов рассматриваются здесь
- FAQ раздела лежит здесь!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
[ Время генерации скрипта: 0.1874 ] [ Использовано запросов: 21 ] [ GZIP включён ]
это код, который должен принимать имя файла от пользователя для создания но я проверил, открыт ли он, а нет, что делать?
Вам необходимо предоставить MCVE. Вы найдете инструкции в документации сайта.
Скомпилируйте со всеми предупреждениями и отладочной информацией: g++ -Wall -Wextra -g с GCC. Прочтите документацию, особенно std :: fstream. open может выйти из строя по нескольким причинам (возможно, из-за операционной системы; для Linux увидеть ошибки в базовом системном вызове открытый (2) . ). Используйте отладчик gdb .
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Другие вопросы по теме
Ответы 2
Я запустил эту программу в Visual Studio с помощью main() , и она отлично работает у меня после исправления нескольких проблем:
- Добавление заголовков: string, fstream, iostream.
- Делаем ICAO std :: string.
- Добавляем в функцию возвращаемый тип и помещаем в конец «что угодно».
- Вместо «или» я использовал ||.
- Создание "правильного" типа bool.
- Добавляем все "std ::".
Вот мой рабочий код. У меня это работает. Проверьте различия с вашим (я добавил std::couts , чтобы проверить, какой if активирован). Если он по-прежнему не работает, возможно, проблема связана с вашей переменной ICAO (это не LEAL или LEPA), с вашим классом Airport или, возможно, у вас нет файлов .txt в правильных каталогах.
Спасибо, отличий от моего немного, но не слишком много. Во всяком случае, сейчас он работает. Я поменял все файлы в новый каталог, и как-то все работает.
Я переместил все файлы, включая исходники, исполняемые файлы и т. д., В новый каталог. Теперь работает. Я предполагаю, что со старым каталогом возникла какая-то проблема.
Похожие вопросы
Находите ответы на сложные технические вопросы по программированию, с которыми сталкиваются инженеры по всему миру в своей ежедневной практике на сайте RedDeveloper.
Имя входного файла присваивается имени существующего файла в качестве входного аргумента для приложения. Имя выходного файла дается так же, как имя ввода, за исключением того, что «_output» вставляется до последнего периода. Таким образом, вывод записывается в тот же каталог, в котором находится вход. Также я начинаю netbeans с
таким образом, IDE имеет привилегии root для каталога. Я пытаюсь открыть файлы и проверить, открыты ли они таким образом.
Любая помощь в определении, почему выходной файл не открывается для записи, была бы очень признательна.
Ответы 3
Попробуйте использовать это:
Это не отвечает на вопрос о сбое Зачем file_stream.open (может быть проблема с правами доступа, отсутствующий файл, нехватка ресурсов и т. д.). Но он обнаруживает сбой.
@BasileStarynkevitch Трудно сказать, почему произошел сбой file_stream.open , файл может не существовать или заблокирован каким-то другим процессом.
В Linux и POSIX вы можете использовать ошибка (3) после сбоя std::fstream::open , который будет использовать открытый (2)-, и это дает причину сбоя. AFAIK, нет стандартного способа C++ 14 получить такую причину.
@BasileStarynkevitch Спасибо, строки отредактировал. errno также существуют в окнах.
Но я думаю, что errno не имеет отношения официально к std::fstream::open (даже если на практике это так)
Существуют и другие потенциальные проблемы, при которых - например, cin >> file_name пропустит ведущие пробелы, начнет чтение в file_name , но завершит работу, если увидит другой символ пробела, поэтому не сможет обрабатывать любые имена файлов со встроенными пробелами. Также рекомендуется проверять успешность операций ввода, как в if (cin >> file_name) < . >else std:cerr else . обрабатывает встроенные пробелы.
это дает мне ошибку в строке "file_stream.open (file_name);"; ошибка: C: \ Users \ mohamed \ Desktop \ try \ main.cpp | 21 | ошибка: нет соответствующей функции для вызова 'std :: basic_fstream :: open (std :: string &)' |
@MohamedAbdelhamid Извините, мне не хватало включаемых зависимостей, я добавил их. Теперь он будет нормально компилироваться.
@Mohit, извините, но он все еще дает мне ту же ошибку! : ')
@Mohit, и когда я ищу файл в папке проекта, я его никогда не нахожу
@MohamedAbdelhamid Но он скомпилирован для меня, я использую g ++ 7.2 в Windows с помощью mingw32. Я думаю, тебе стоит обновить свой компилятор
@Mohit, пожалуйста, дайте мне знать, как обновить компилятор до вашей версии :)
Ответ Мохита сообщает вам, как обнаружить отказ std::fstream::open .
Эта функция обычно использует какую-либо службу операционной системы для открытия файла, как правило, открыть системный вызов, например открытый (2) в Linux (что может дать сбой по многим причинам).
Your program is buggy because your nof probably does not contain a valid file path. I would recommend clearing it with memset(nof, 0, sizeof(nof)) before reading it, and using your debugger, e.g. gdb to find your bug (if you enter a filename of only three characters, or one of fourty letters, your program won't work)
Вы можете спросить свою операционную систему о причине этого сбоя. В Linux вы должны использовать ошибка (3) (например, через перрор (3)).
Насколько мне известно, стандарт C++ не определяет, как запрашивать причину отказа std::fstream::open (и, вероятно, не требует связи между fstream и errno )
Педантично, стандарт C++ не требует, чтобы std::fstream использовал файлы операционной системы. Конечно, на практике fstream -ы их всегда используют. Но в принципе у вас может быть реализация C++ 14 на чем-то без файлов или даже без ОС (но я не могу назвать ни одной).
На практике понятие файла тесно связано с операционные системы и файловые системы. У вас могут быть ОС без файлов (в прошлом OS / 400, PalmOS, GrassHopper и другие академические ОС), даже если сегодня это очень необычно.
И понятие файла специфично для ОС: файл на Окна не то же самое, что файл на Unix или на z / OS.
Стандартные спецификации языков (например, C++ 11 n3337, C11 n1570, Scheme R5RS) написаны на английском языке, и они намеренно расплывчаты в отношении «файлов» или «файловых потоков» (именно потому, что разные операционные системы имеют разные понятия о них).
То, как вы обрабатываете вводимые пользователем данные, делает переменную nof недопустимым путем к файлу в вашей запущенной ОС. Вот почему fstream::is_open() возвращает false.
Этот код требует ввода данных пользователем, пока не получит xt . Но в C / C++ допустимая строка типа char* или char[] должна заканчиваться символом \0 . Так что, если вам все еще нравится способ обработки ввода, добавьте \0 в конец nof , прежде чем разорвать петли.
Но я предлагаю вам использовать вместо них std::string и getline , описанный выше способ довольно неудобен.
std :: string nof; std :: getline (std :: cin, nof); Я пробовал это вначале, но это не сработало и продолжало выдавать мне ошибку как file.open (// принимает только char)
Читайте также: