我对C++和编程一般都比较陌生,所以我猜测我的错误是一个非常简单的错误。无论如何,我一直致力于从.txt文件中扫描DNA序列,并且正在尝试对其进行编程,以便用户可以从命令行指定数据文件的名称。我包括了整个函数供参考,但是我得到的特定问题是我一直无法让文件实际打开,程序总是返回“Unable to open file”消息。我遇到问题的部分(我认为)是最后一个循环,但是我包含了整个函数供参考。ifstream C++的问题
int dataimport (int argc, char* argv[]){
vector<string> mutationfiles (argc -1); //mutationfiles: holds output file names
vector<string> filenames (argc - 1); //filenames: holds input file names
if (argc > 1){
for (int i = 1; i < argc; ++i){
string inputstring = argv[i]; //filename input by user
filenames[i-1] = inputstring; //store input filename in vector
stringstream out;
out << inputstring << "_mutdata.txt"; //append _mutdata.txt to input file names
mutationfiles[i-1] = (out.str()); //store as output file name
inputstring.clear(); //clear temp string
}
}
else{
cout << "Error: Enter file names to be scanned" << endl;
system("PAUSE");
return EXIT_FAILURE;
}
for(int repeat = 0; repeat < argc; ++repeat){
ifstream myfile; //open input file
myfile.open (filenames[repeat].c_str());
ofstream myfile2; //open output file
myfile2.open (mutationfiles[repeat].c_str());
string all_lines;
if (myfile.is_open()){
while (myfile.good()){ //scan data
getline (myfile,all_lines,'\0');
}
myfile.close(); //close infile
}
else{ //error message
cout << "Unable to open file\n";
system("PAUSE");
return EXIT_FAILURE;
}
}
}
请让我知道是否有你需要的任何额外信息或任何我应该研究,这样我可以更好地帮助自己!
谢谢!我更新了我的代码,但它仍然没有扫描这些文件,但最终肯定会造成问题。我添加了一些打印语句,矢量文件名显示正确。我的数据文件与我的exe文件保存在相同的位置,所以它的位置正确,对吗? – jblazer28
当前工作目录很可能从父进程继承,而不是设置到'.exe'的位置。尝试使用绝对路径作为您的文件名(例如,如果您在Windows上,则使用'C:\ path \ to \ file') – Useless
。如果您通过在IDE中推送Play来使用Visual Studio调试器,默认情况下它会在项目目录中启动您的应用程序。请参见[项目属性 - >配置属性 - >调试 - >工作目录]但是,如果您在Windows资源管理器中单击* .exe文件,那么工作目录将是exe目录。 – bitwise