을 열려면 실패합니다.
콘솔을 통해 수동으로 제공하면 작동합니다!
나는 경로를 자르고 파일 이름 만 전달하기 때문에 차이점이 어디 있는지 알지 못합니다.은 EXE에서 파일을 드래그 한 후, ifstream 나는 다음과 같은 문제가있는 파일
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;
}
그것은 생성자에 이미 실패 :
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 = "";
}
당신은 어떤 생각이 왜이
는 코드를 살펴 있나요?
UPDATE : 매개 변수로 파일이 현재 작동
. 해결책은 전체 경로를 벗어나는 것이 었습니다.
어쨌든 난 하드 코딩 된 파일에 같은 오류가 있습니다. 나는 그것이 동일하지 않기 때문에 파일 이름의 처음에 ... .\
을 추가했다고 생각했습니다. 성공하지 못했습니다.
코드 :
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 : 솔루션했다 : EXE 파일, 삭제 된 파일에서 오는 하나 "루트"폴더 변경에 파일을 삭제합니다. 하드 코딩 된 파일에 * .exe 경로를 입력하면 해결됩니다!
추측 : 셸이 여전히 파일에 대한 잠금을 가지고있을 수 있습니까? 당신은 파일을 열기 전에 지연을 추가 할 수 있습니다. (좋은 해결책은 아닙니다! delay + retry를 몇 번 시도해도 괜찮을지라도) 읽기 잠금 만 지정하는 파일을 열면 ifstream을 통해이를 수행 할 수 있습니다. – Rup
당신은'file'의 값을 출력하여 두 상황 모두에서 값이 같은지 확인할 수 있습니다. –
@ Kiril Kirov, 파일 이름이 정확합니다. – Beasly