C++ 无法使用控制台输入名称打开ifstream

C++ 无法使用控制台输入名称打开ifstream,c++,ifstream,C++,Ifstream,我遇到了一个奇怪的情况。我已经构建了一个代码来比较多对文本文件的内容。每对文件的名称来自名为batchfile.txt的文本文件,格式如下: filename1.txt,filename2.txt filename3.txt,filename4.txt 问题是,尽管这些文件与batchfile.txt位于同一目录中,但它们不会打开,因为batchfile.txt会打开。。。我也尝试过将文件名作为字符串(我用C++11编译),但结果是一样的。 最奇怪的是,它在调试时运行正常。。。如有任何建议,将不

我遇到了一个奇怪的情况。我已经构建了一个代码来比较多对文本文件的内容。每对文件的名称来自名为batchfile.txt的文本文件,格式如下: filename1.txt,filename2.txt filename3.txt,filename4.txt 问题是,尽管这些文件与batchfile.txt位于同一目录中,但它们不会打开,因为batchfile.txt会打开。。。我也尝试过将文件名作为字符串(我用C++11编译),但结果是一样的。 最奇怪的是,它在调试时运行正常。。。如有任何建议,将不胜感激。非常感谢。 代码如下:

#include <iostream>
#include <fstream>
#include <string.h>
#include <string>
#include <limits>


using namespace std;

void compare (ifstream &file1, ifstream &file2)   {
    string f1, f2;
    int i(0), mark(0);
    while(getline(file1, f1) && getline(file2, f2)) {
        i++;
        if (f1!=f2) {
            cout << "ERROR IN LINE " << i << endl;
            cout << "FIRST FILE: " << f1 << endl;
            cout << "SECOND FILE: " << f2 << endl;
            mark=-1;
        }
    }
    if(!mark)
        cout << "THE FILES ARE IDENTICAL" << endl << endl;
}
int main(int argc, char *argv[])
{
    ifstream file1, file2, filebatch;
    string f1, f2, fb;
    string namef1, namef2;
    string bat;
    int intbat;
    size_t count(0);
    cout << "Want to compare more pairs of text files? y/n " << flush;
    cin >> bat;
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    cout << endl;
    if(bat=="y" || bat=="Y") intbat=1;
    else if(bat=="n" || bat=="N") intbat=0;
    else {
        intbat=0;
        cout << "Unknown answer. One pair is considered." << endl;
    }
    if(!intbat) {
         if(argc==1) {
         cout << "NAME OF THE FIRST FILE: " << flush;
         cin >> namef1;
         cin.clear();
         cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
         cout << "NAME OF THE SECOND FILE: " << flush;
         cin >> namef2;
         cin.clear();
         cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    else{
        namef1=argv[1];
        namef2=argv[2];
    }
    file1.open(namef1.c_str(), ios::in);
    if (!file1)
    {
        // NO, abort program
        cerr << "Unable to open file1. " << endl;
        exit(EXIT_FAILURE);
    }
    file2.open(namef2.c_str(), ios::in);
    if (!file2)
    {
        // NO, abort program
        cerr << "Unable to open file2. " << endl;
        exit(EXIT_FAILURE);
    }
    cout << endl;
    compare(file1, file2);
}
else{
    filebatch.open("batchfile.txt", ios::in);
    if (!filebatch)
    {
        // NO, abort program
        cerr << "Unable to open batchfile.txt " << endl;
        exit(EXIT_FAILURE);
    }
}
while(getline(filebatch, fb))  {
    count=fb.find(",", 0);
    namef1=fb.substr(0, count);
    namef2=fb.substr(count+1);
    file1.open(namef1.c_str(), ios::in); 
    file2.open(namef2.c_str(), ios::in);
    if (file1.is_open() && file2.is_open()) {  // the problem seems to be here
        cout << namef1 << " " << namef2 << endl;
        compare(file1, file2);
        cout << endl;
    }
    else    {
        // NO, abort program
        cerr << "Unable to open one of the file. " << endl;
        exit(EXIT_FAILURE);
    }
}
file1.close();
file2.close();
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效比较(ifstream和file1、ifstream和file2){
串f1,f2;
int i(0),mark(0);
while(getline(file1,f1)和&getline(file2,f2)){
i++;
如果(f1!=f2){

当程序失败时,您给它的确切输入是什么?当程序失败时,它的实际输出是什么?在一个不相关的注释中,您的比较逻辑中有一个缺陷:如果一个文件比另一个文件有更多的行怎么办?那么它们是不相同的,但您将打印它们。有两种输入方式。第一种是手动(argc=1)当我从控制台输入filames时,第二个是相当自动的:它从batchfile.txt读取输入。程序解析读取的字符串并将其拆分为两个子字符串,这两个子字符串是文件名。batchfile中的每一对文件都用“\n”分隔:batchfile.txt的第一行或第二行失败了吗?谢谢大家的支持请注意。第一个文本文件似乎已损坏或具有一些不寻常的属性。我已将它们从列表中删除,现在可以使用,,,