2012-09-05 54 views
0

我对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; 
     } 
    } 
} 

请让我知道是否有你需要的任何额外信息或任何我应该研究,这样我可以更好地帮助自己!

回答

1
for(int repeat = 0; repeat < argc; ++repeat) 

应该

for(int repeat = 0; repeat < argc - 1; ++repeat) 

除此之外我什么都看不到,会导致你所得到的错误。

如果您解决了这个问题,仍然会出错,我会尝试打印名称以确保您的两个向量的内容是正确的。

for(int repeat = 0; repeat < argc - 1; ++repeat) 
{ 
    cout << filenames[repeat] << endl; 
    cout << mutationfiles[repeat] << endl; 
} 
+0

谢谢!我更新了我的代码,但它仍然没有扫描这些文件,但最终肯定会造成问题。我添加了一些打印语句,矢量文件名显示正确。我的数据文件与我的exe文件保存在相同的位置,所以它的位置正确,对吗? – jblazer28

+0

当前工作目录很可能从父进程继承,而不是设置到'.exe'的位置。尝试使用绝对路径作为您的文件名(例如,如果您在Windows上,则使用'C:\ path \ to \ file') – Useless

+0

。如果您通过在IDE中推送Play来使用Visual Studio调试器,默认情况下它会在项目目录中启动您的应用程序。请参见[项目属性 - >配置属性 - >调试 - >工作目录]但是,如果您在Windows资源管理器中单击* .exe文件,那么工作目录将是exe目录。 – bitwise

-1

变化for (int i = 1; i < argc; ++i)for (int i = 0; i < argc; i++)

变化filenames[i-1] = inputstring;filenames[i] = inputstring;

变化mutationfiles[i-1]mutationfiles[i]

+0

argv中的第一个元素是程序的路径和名称。 – bitwise