从参数中读取文件名时会给出这些错误。
“无法读取内存” “读取字符串字符的错误”
如果字符串被定义为用户输入的文本或硬键,那么它可以正常工作。但是,如果文件名的一部分是从文件中读取的,则连接然后通过参数传递,则会给出这些错误。
无论有没有.c_str()
我都试过了
删除文本文件中的一些杂散空格后,现在可以在windows中使用,但不能在linux中使用吗?
void batch_helper()
{
//batch
vector <string> field_reports;
ifstream field_report_batch;
field_report_batch.open("OCR_batch.txt");
string line;
while (true) { //fill stack with batches
getline(field_report_batch, line);
if (line.empty() || !field_report_batch || field_report_batch.fail())
break;
field_reports.push_back(line);
}
field_report_batch.close();
for (unsigned int i = 0; i < field_reports.size(); i++) {
parse_file("timesheets_we" + field_reports[i] + "_batch_export.csv"); //this does not work
//parse_file("timesheets_we20121221_batch_export.csv"); //this works
}
}
void parse_file(const string timecard_WE)
{
//count records
int timecard_count = 0;
string line;
//test input file
ifstream timecard_test;
timecard_test.open(timecard_WE.c_str());
getline(timecard_test, line); //burn header
while (true){
getline(timecard_test, line); //read in row_n
if (!timecard_test || timecard_test.fail())
break;
timecard_count++;
}
timecard_test.close();
line.clear();
}
在stackoverflow上发布的类似问题是here,问题是隐藏的空格或行末尾的char。我检查了空白区域,但到目前为止还没找到它们。
我会试试这个:
while (true) {
if (line.back() == '\r' || line.back() == '\n') {
test_log << "pop: " << line.back() << "\r\n";
line.pop_back();
}
}
生成的文件是
20120615
pop:
20120622
pop:
20120629
pop:
20120706
pop:
20120713
pop:
20120720
pop:
20120727
pop:
20120803
pop:
20120810
pop:
20120817
pop:
20120824
pop:
20120831
pop:
20120907
pop:
20120914
pop:
20120921
pop:
20120928
pop:
20121005
pop:
20121012
pop:
20121019
pop:
20121026
pop:
20121102
pop:
20121109
pop:
20121116
pop:
20121123
pop:
20121130
pop:
20121207
pop:
20121214
pop:
20121221
pop:
timesheets_we20120615_batch_export.csv BREAK timesheets_we20120622_batch_export.csv BREAK timesheets_we20120629_batch_export.csv BREAK timesheets_we20120706_batch_export.csv BREAK timesheets_we20120713_batch_export.csv BREAK timesheets_we20120720_batch_export.csv BREAK timesheets_we20120727_batch_export.csv BREAK timesheets_we20120803_batch_export.csv BREAK timesheets_we20120810_batch_export.csv BREAK timesheets_we20120817_batch_export.csv BREAK timesheets_we20120824_batch_export.csv BREAK timesheets_we20120831_batch_export.csv BREAK timesheets_we20120907_batch_export.csv BREAK timesheets_we20120914_batch_export.csv BREAK timesheets_we20120921_batch_export.csv BREAK timesheets_we20120928_batch_export.csv BREAK timesheets_we20121005_batch_export.csv BREAK timesheets_we20121012_batch_export.csv BREAK
日志文件中的BREAK是文件中断的结束。
答案 0 :(得分:0)
解决方案很简单,twp部分:
第一部分: 我从中读取部分文件名的文本文件,然后连接成一个全名,一些文本后面有一个空格。我打开文件,“全选”,然后手动删除尾随空格。
第二部分: 这修正了它(true)
{ if (line.back() == '\r' || line.back() == '\n') line.pop_back();}
综合解决方案:
while (true) { if (line.back() == '\r' || line.back() == '\n' || line.back() == ' ') line.pop_back();}