2013-02-27 3 views
0

Я делаю небольшую программу, которую я сделал раньше в Java, но я хочу попробовать и получить то же самое на C++. Идея заключается в том, чтобы объединить два текстовых файлаЧтение txt-файла с использованием QTextStream C++

file1:

a 
b 
c 

file2:

1 
2 
3 

выходной файл следует читать:

a1 
b2 
c3 

Я посмотрел на документы QTextStream и это был предложенный код для чтения файла по строке в строки

QFile file(input); // this is a name of a file text1.txt sent from main method 
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
{ 
    return 1; 
} 
QTextStream in(&file); 
QString line = in.readLine(); 
while (!line.isNull()) 
{ 
    line = in.readLine(); 
} 

По какой-то причине ничего не загружается из файла вообще. Я доказал это, напечатав «линию» на консоли и ничего не получил.

Значит, любые идеи? Все, что я хочу, чтобы прочитать файл и в конечном итоге со строкой, как этот

QString text1 = "a\n2\n3" 

Я бы сделать это для обоих файлов, разбить строки в QStringList (скорее всего) присоединиться к ним вместе в формате я хочу и напишите их в третий файл txt.

+1

благодаря Grammar Nazi для остановки и не помогая – AngryDuck

+0

Да, я знаю @Roku, что в основном то, что я прошу, даже не прочитав файл, потому что все «input1» есть, «text1.txt» нет пути к файлу – AngryDuck

+0

Есть ли какая-то конкретная причина, по которой он должен быть QTextStream? –

ответ

5

Почему вы читаете строку за строкой, если хотите весь файл?

QString line = in.readAll(); 

Кроме того, ваш в то время как цикл не так, вам нужно while (!in.atEnd()) для текстового потока, вместо проверки, если строка является нулевой.

readLine не будет содержать символ новой строки.

В любом случае было бы гораздо легче открыть оба файла одновременно и построить свою строку на ходу вместо разделения и объединения.

QFile f1("h:/1.txt"); 
QFile f2("h:/2.txt"); 

f1.open(QIODevice::ReadOnly | QIODevice::Text); 
f2.open(QIODevice::ReadOnly | QIODevice::Text); 

QString s; 

QTextStream s1(&f1); 
QTextStream s2(&f2); 

for (int i = 0; i < 3; ++i) { 
    s.append(s1.readLine()); 
    s.append(s2.readLine()); 
    if (i != 2)s.append("\n"); 
} 
+0

приветствия для ответа кажутся именно тем, что мне нужно, но он все еще ничего не читает, где файлы txt должны быть просто прочитаны f1 («text1.txt»). Cus я могу в принципе поместить это в java и прочитать его из папки проекта? – AngryDuck

+0

Ну, это работает для меня, на самом деле неважно, где находятся файлы, я жестко закодировал его, но он должен работать до тех пор, пока вы передаете действительный путь к файлам. Вероятно, вы не получаете выход, потому что вы не открываете файл должным образом. Ваш метод возвращает 1? – dtech

+0

Нет, я имею в виду, что я не помещал путь к файлу, не вставляя имя файла, как вы можете в java (которое затем ищет это имя в папке проекта) im делает это, потому что im получает имена файлов через пользовательский ввод с консоли, поэтому это работает, или мне действительно нужно указать путь к файлу, потому что это просто кажется глупым, что theres не может просто указать имя – AngryDuck

0

Попробуйте блок-:

while(!in.atEnd()) 
{ 
    QString line = in.readLine(); 
    .... 
} 

вы получите выходные данные, используя это время цикла?

1

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

QString filename = QCoreApplication::applicationDirPath() + "/" + input; 
Смежные вопросы