从外部创建的文件中读取数据

时间:2009-07-26 05:07:02

标签: c++

我正在尝试读取程序外部创建的文件,但遇到了一些麻烦。该程序让用户创建一个文件。然后它从程序外部创建的两个.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();
}

但是,当我在记事本中打开创建的文件时,它会显示为空白。这是因为读取字符串是不可能的,因为正在读取的文件是单独创建的吗?我不太确定。任何帮助表示赞赏。

5 个答案:

答案 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,依此类推。