• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Файл не открывается

  • Автор темы anidismal
  • Дата начала
A

anidismal

Задача такова:
Нужно написать программу, которая открывает файл, читает из него текст и копирует в другой файл, причем ещё она должна выдавать ошибку, если файлы не открываются. Файлы не открываются))) Вроде все написал как в книге.
#include <iostream>
#include <fstream>
#include <string>
string word;
int main()
{
ifstream infile("C:\BC5\BIN\pirors.txt");
ofstream outfile("C:\BC5\BIN\pirors.txt");
if(!infile)
{
cerr<<"Error of open in file.\n";
cin>>"";
return -1;
}
if(!outfile)
{
cerr<<"Error of open out file.\n";
cin>>"";
return -2;
}
while(infile>>word)
outfile<<word<<" ";
return 0;
cin>>"";
}
 
G

grigsoft

Слеши в пути должны быть двойными (не С:\, а С:\\). Путь, прошитый в программу - дурной тон.
 
A

anidismal

а если убрать дурной тон?))) как по иному?

я заменил слеши на двойные слеши, но программа все равно выдает ошибку)
 
S

SNike

На какой строке останавливается, какое сообщение выдает?
 
A

anidismal

выдает мое сообщение: Error is open in file (я же сделал проверку на то, загрузился ли файл или нет).
 
S

SNike

Нет, я имел ввиду что отключи свою проверку и посмотри какое будет системное сообщение.

Возможно:
- файл не существует - нужно создать этот файл
- файл не найден - нужно задать путь
- отказано в доступе - возможно файл уже используется или недостаточно прав для его открытия

и т.п.

Системное сообщение более точно опишет проблему
 
A

anidismal

всё удачно вроде, компилится без проблем, а вот дело не делает, просто быстро мелькает черное окно и закрывается.
 
S

SNike

Сделай чтоб то что читается выводилось для начала не в файл, а на экран.

Перед завершением программы поставь паузу (например, ожидание нажатия клавиши). Или запусти cmd.exe, а потом запусти свою прогу из командной строки.
Или, сделай так: MyProg.Exe > log.txt
тогда все что выводится на экран будет перенаправляться в log.txt, потом просто откроешь его и посмотришь чего там творилось

Нужно определиться что успевает сделать программа


-------------------------------------

Посмотри
Поможет?
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
<!--QuoteBegin-SNike+9:06:2007, 13:00 -->
<span class="vbquote">(SNike @ 9:06:2007, 13:00 )</span><!--QuoteEBegin-->Сделай чтоб то что читается выводилось для начала не в файл, а на экран.

Перед завершением программы поставь паузу (например, ожидание нажатия клавиши). Или запусти cmd.exe, а потом запусти свою прогу из командной строки.
Или, сделай так: MyProg.Exe > log.txt
тогда все что выводится на экран будет перенаправляться в log.txt, потом просто откроешь его и посмотришь чего там творилось

Нужно определиться что успевает сделать программа
[snapback]68776" rel="nofollow" target="_blank[/snapback]​
[/quote]

а ужас... неужели дебагеры запретили?
 
A

anidismal

при запуске через сеанс ms-dos(cmd.exe) я перехожу в каталог с прогой, запускаю её (ну командой) и ничего, опять передо мной мигает С:\>(программу я перекинул туда).
Используя твой второй метод я тоже ничего не добился. log.txt создался пустой.
 
S

SNike

а почему из IDE не запускаешь на трассировку?
Заодно посмотрел бы на состояние переменных, на пошаговое выполнение и т.п.
 
A

anidismal

а почему из IDE не запускаешь на трассировку?
Заодно посмотрел бы на состояние переменных, на пошаговое выполнение и т.п.
я С++ начал учить вчера, и не понимаю о чем ты:)
 
A

anidismal

я модифицировал свою программу :)
#include <iostream>
#include <fstream>
#include <string>
string word;
int main()
{
ifstream infile("C:\\pirors.txt");
infile>>word;
cout<<word;
cin>>"";
}
теперь она просто ожидает ввод символа, но не показывает содержание файла.

Borland C++ . Не visual, потому что сперва нужно, как мне кажется научится применять сам код, а потом уже назначать его кнопочкам на форме.
 
S

SNike

Сходи сюда:
Так добываются знания :)
 
A

anidismal

это первый вопрос, на котором я подвис)
 
A

anidismal

Возможно данные из файла pirrors.txt не передаются переменной word. Я сделал передачу так:
ПРАВИЛЬНО ли я сделал?

УРАААА!!!! ЗАРАБОТАЛО!!! НЕ ЗНАЮ КАК, НО ЗАРАБОТАЛО!!!!
#include <iostream>
#include <fstream>
#include <string>
void main()
{
string word;
ifstream infile("C:\\pirors.txt");
infile>>word;
cout<<word;
cin>>"";
}
На экран выдалось слово, хранящееся в файле pirors.txt!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Теперь вопрос №2.
Товарищ grigsoft намекнул, что можно иным способом указывать путь к файлам, чем меня ужасно заинтриговал :) . Поскольку я сам понимаю, что указывать моим способом пути к файлам весьма глупо(ведь файлы будут лежать в папке с программой, а её пользователь может положить куда захочет), хотелось бы узнать этот способ. Может как в HTML? чтобы файл грузился из папки с программой?
 
S

SNike

Молодец!
Кстати, если интересно, то вот :)

По поводу указания файлов и путей - не заморачивайся, это чуть попозже, когда освоишься :)
Они могут считываться, к примеру, из INI файла, из реестра, из того же обычного текстового файла, передаваться из командной строки и фиг знает еще какими способами :)

Конкретных рекомендация я тебе дать не могу, т.к. C не занимаюсь, но принципы везде схожи :)

А, кстати, добавь вторую строку в свой текстовый файл и попробуй снова его прочесть ;)
 
A

anidismal

А, кстати, добавь вторую строку в свой текстовый файл и попробуй снова его прочесть
Читает, только на строку не переносит))
PS. я щас уйду гулять, если можешь, дай свой номер ICQ(есть есть) или почты(лучше аську).
 
S

SNike

Нужно сделать цикл чтения
Код:
Пока НеКонецФайла 
ПрочитатьСтроку
ВывестиНаЭкран
...
КонецЦикла


Используй оператор чтения с переходом к следующей строке
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!