开发者

After dragging a file on exe, ifstream fails to open file

I have have the following problem:

When I drag and drop a file to my tool (exe) when ifstream fails to open the file.

If I give it manually though the console it works!

I don't get where the diffenence is, because I am cutting the path and passing just the filename.

Have a look at the code:

int main(int argc, char* argv[]) {
if (argc < 2) {
    cout
        << "ERROR: Wrong amount of arguments! Give at least one argument ...\n"
        << endl;
    cout << "\n" << "Programm finished...\n\n" << endl;
    cin.ignore();
    exit(1);
    return 0;
    }

    vector<string> files;

   for (int g = 1; g < argc; g++) {
      string s = argv[g];
      cout<<"parameter at: " << g << " = " << argv[g] << "\n" << endl;

      string filename = "";
      int pos = s.find_last_of("\\", s.size());

      if (pos != -1) {
          filename.append(s.substr(pos + 1));
//         cout<<" cutted path: " << s.substr(0,s.size()-filename.size()) << endl;

//            cout << "argv[1] " << argv[1] << endl;
          cout << "\n filename: " << filename << "\t pos: " << pos << endl;
          files.push_back(filename);

          }
      files.push_back(s);
      }


  for (unsigned int k = 0; k < files.size(); k++)
      {
      cout << "files.at( " << k << " ): "开发者_高级运维 << files.at(k).c_str() << endl;
      Converter a(files.at(k).c_str());
      a.getCommandsFromCSV();
      a.saveConvertedFile();
      }

  cout << "\n" << "Programm finished...\n\n" << endl;

  cin.ignore();

  return 0;
}  

It fails already on the constructor:

Converter::Converter(const char* file) {
  filename = file;
  myfile.open(filename.c_str(), ios_base::in);

  cout << (myfile ? "open successful on constructor " : "some error on constructor");
  cin.ignore();

  trace_raw = "";
}  

You have any idea why?


UPDATE:

The file as parameter works now. The solution was to leave the full path.

Anyway I have the same error on a hard coded file. I thought it may be the same that's why I added .\ at the beginning of the file name... without success.

The code:

void GenericCommandConverter::getATCommandsFromCSV() {

  cout << "\t| +++++++++++getATCommandsFromCSV() started+++++++++++++ |"
    << endl;

 /*
  * CSV file name is hardcoded
  */
  string filename_csv = ".\\test.csv";
  string commands = "";
  int pos_start = 0;
  int pos_end = 0; // "|"
  int substrLength = 0;
  int separator_count = 0;

  char c;

  vector<string> lines;
  vector<string> commandList;
  vector<vector<string> > linesSeparated;


  ifstream csvFile;
  csvFile.open(filename_csv.c_str(), ios_base::in);

  cout << (myfile ? "open successful on getATCommandsFromCSV " : "some error on   getATCommandsFromCSV ");
  cin.ignore();  
      ...  

UPDATE2: The solution was: on dropping a file to the exe, the "root" folder changes to the one where the dropped file comes from. Giving the hardcoded file the path from the *.exe solved it!


I am guessing your current directory is wrong. Don't cut the path off. Anyway you should do error checking / debugging to see why it couldn't open the file. Diligent debugging is essential for solving problems without having to make blind guesses.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜