C++ 无法使用控制台输入名称打开ifstream
我遇到了一个奇怪的情况。我已经构建了一个代码来比较多对文本文件的内容。每对文件的名称来自名为batchfile.txt的文本文件,格式如下: filename1.txt,filename2.txt filename3.txt,filename4.txt 问题是,尽管这些文件与batchfile.txt位于同一目录中,但它们不会打开,因为batchfile.txt会打开。。。我也尝试过将文件名作为字符串(我用C++11编译),但结果是一样的。 最奇怪的是,它在调试时运行正常。。。如有任何建议,将不胜感激。非常感谢。 代码如下:C++ 无法使用控制台输入名称打开ifstream,c++,ifstream,C++,Ifstream,我遇到了一个奇怪的情况。我已经构建了一个代码来比较多对文本文件的内容。每对文件的名称来自名为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的第一行或第二行失败了吗?谢谢大家的支持请注意。第一个文本文件似乎已损坏或具有一些不寻常的属性。我已将它们从列表中删除,现在可以使用,,,