C++ 为什么我总是收到这个文件错误?

C++ 为什么我总是收到这个文件错误?,c++,C++,我试图从一个文件中读取信息,然后它将转换读入的信息并将其输出到另一个文件。然后我需要删除原始文件并重命名包含更新信息的第一个或第二个文件。我尝试通过调用原始文件,将信息转换为新文件,然后使用删除函数和C++中的重命名函数来实现这一点。知道我为什么在打开文件时出错吗 data.txt包含 XCIX 4999 十一 九 五十五 九十五 temp.txt为空 两者都保存在C:\Users\Owner\Documents\Visual Studio 2013\Projects\Roman Numbe

我试图从一个文件中读取信息,然后它将转换读入的信息并将其输出到另一个文件。然后我需要删除原始文件并重命名包含更新信息的第一个或第二个文件。我尝试通过调用原始文件,将信息转换为新文件,然后使用删除函数和C++中的重命名函数来实现这一点。知道我为什么在打开文件时出错吗

data.txt包含

  • XCIX
  • 4999
  • 十一
  • 五十五
  • 九十五
temp.txt为空

两者都保存在C:\Users\Owner\Documents\Visual Studio 2013\Projects\Roman Numbers\Debug中

int main() 
{
fstream dataFile;   
fstream outfile;    
string line;
string output;
outfile.open("temp.txt", ios::out);
dataFile.open("data.txt", ios::in);

if (!dataFile)
{   
    cout << "File Error\n";

}
else
{
    cout << "Opened correctly!\n" << endl;
    while (dataFile)
    {
        if (dataFile.eof()) break;
        getline(dataFile, line);
        if (line[1] == '1' || line[1] == '2' || line[1] == '3' || line[1] == '4' || line[1] == '5' || line[1] == '6' || line[1] == '7' || line[1] == '8' || line[1] == '9' || line[1] == '0')
        {
            outfile << numbertonumberal(line) << "\n";
        }
        else
        {
            outfile << romantonumberal(line) << "\n";
        }
    }

    dataFile.close();
    remove("data.txt");
    rename("temp.txt", "data.txt");
    cout << "All values have been converted are are in the original file\n";
    outfile.close();
}


return 0;
}
intmain()
{
流数据文件;
fstream输出文件;
弦线;
字符串输出;
outfile.open(“temp.txt”,ios::out);
打开(“data.txt”,ios::in);
如果(!数据文件)
{   

cout首先:检查文件。它是否存在?代码中有一些错误:

if (!dataFile) // incorrect. datafile is instance of class but not ponter
if (datafile.is_open()) // correct. use a method from fstream class

while (dataFile) // incorrect. its true while object "datafile" exists (see above)
while (!datafile.eof()) // correct. And you don`t need "if (dataFile.eof()) break;"
因此,您的代码应该如下所示:

if(datafile.is_open()) {
    while(!datafile.eof()) {
        getline(datafile, line);

        ... // use isdigit() function for compare with digits (<cctype> header)
    }
} else {
    cerr << "Cannot open file" << endl;
}
if(datafile.is_open()){
而(!datafile.eof()){
getline(数据文件,行);
…//使用isdigit()函数与数字(标头)进行比较
}
}否则{

cerr您是否已验证data.txt是否确实存在,以及项目启动时的工作目录是否在您认为的位置?请注意,工作目录不一定是您的可执行文件所在的目录。我不确定仅在将输出文件从temp.txt重命名为data.txt后才关闭该文件是否是一个好主意。输出可能是缓冲并仅在实际关闭时刷新到物理文件。@antred将刷新到同一个节点,但该节点将被称为data.txt。@wakjah您保存了我,我没有将其保存到正确的文件夹中,现在我需要让它实际重命名该文件。类似于ostream的类具有布尔上下文的转换运算符当调用时,如果流处于良好状态,即在本例中,如果它已打开并且可以从中读取,则返回true。表达式“if(!dataFile)”完全可以接受。