我正在尝试读取程序外部创建的文件,但遇到了一些麻烦。该程序让用户创建一个文件。然后它从程序外部创建的两个.txt文件中读取单词,然后将单词写入创建的文件。
#include "std_lib_facilities.h"
int main()
{
string word;
cout << "Create file.\n";
char name[20];
cin >> name;
ofstream ost(name, ios::out);
cout << "Open first file.\n";
char filename[20];
cin >> filename;
ifstream ist(filename);
while(ist >> word) ost << word << " ";
ist.close();
cout << "Open second file.\n";
cin >> filename;
ifstream isttwo(filename);
while(isttwo >> word) ost << word << " ";
isttwo.close();
ost.close();
keep_window_open();
}
但是,当我在记事本中打开创建的文件时,它会显示为空白。这是因为读取字符串是不可能的,因为正在读取的文件是单独创建的吗?我不太确定。任何帮助表示赞赏。
答案 0 :(得分:1)
代码是正确的。只需确保在写下第一个文件的名称时,以及第二个文件的名称也是如此。 例如:
first.txt
second.txt
答案 1 :(得分:0)
潜在的问题是您使用cin而不是getline。
想象一下这个输入:
Open second file.
>>file one.txt
这显然不会打开你想要的文件,因为一旦你到达一个空格,cin就会停止阅读。
尝试明确打开名称,例如:
ost.open(name);
我也不喜欢你隐含使用&gt;&gt; while循环中的运算符。试试这个:
while (!ist.eof())
{
getline(ist, word);
ost << word;
}
答案 2 :(得分:0)
也许你应该null终止文件名[20]字符串。像filename [20] = {0};在从标准输入中获取之前;然后尝试在控制台上打印文件名以检查文件名是否正常。
答案 3 :(得分:0)
Trikker,
编译的代码带有微不足道的变化,我遇到了你遇到的同样问题,但实际上它确实有效。这就是我发生的事情。它与您运行程序的方式有关。 exe文件保存在../ProjectDir/Debug目录中。如果将两个输入文件保存在Debug目录中,则应该从命令提示符运行程序,而不是从IDE运行(假设是Visual Studio 2008)。但是,如果从IDE运行它,请将两个输入文件保存在../ProjectDir/ProjectDir中。一旦我这样做,一切都和我好。
为了确定这个目录,我已经从IDE打印了运行程序的目录。虽然,提示显示它正在运行Debug目录中的exe,但工作目录实际上是ProjectDir / ProjectDir。
无论如何,请提供以下代码并告诉我们?
// #include“std_lib_facilities.h”
#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
system("cd");
//string word;
char word[80];
cout << "Create file.\n";
char name[20];
cin >> name;
ofstream ost(name, ios::out);
cout << "Open first file.\n";
char filename[20];
cin >> filename;
ifstream ist(filename);
while(ist >> word) ost << word << " ";
ist.close();
cout << "Open second file.\n";
cin >> filename;
cout << filename;
ifstream isttwo(filename);
while(isttwo >> word) ost << word << " ";
isttwo.close();
ost.close();
//keep_window_open();
}
这个目录问题也可能解释了为什么你没有得到任何东西,当试图打印出它是否正在阅读任何东西。您可能应该检查输入文件创建是否成功。要做到这一点,只需添加...
if ( ist.fail() ){
cout << "file open failed\n";
}
后
ifstream ist(filename)
答案 4 :(得分:0)
如果使用绝对路径会发生什么?例如在Windows上尝试c:\file.txt
,依此类推。