我正在尝试读取一个类似" -f Filename.txt"的.txt文件。我正在处理的项目要求我在" -f"之后查找文件的名称,用该名称打开文件并将信息提取到矢量字符串中。
除了提取之外,我能做到这一切。由于某种原因,它不会打开文件。
这是我的代码:
int main(int argc, char* argv[])
{
ifstream file;
string line;
vector <string> lines;
for (int i=0; i<argc; i++)
{
if (strcmp( argv[1], "-f" )==0)
{
cout << "I am here" << endl;
std::string argv2 = argv[2];
cout << argv2 << endl;
file.open(argv2.c_str());
if(!file.is_open())
{
cout << "file failed to open" << endl;
}
while (getline(file, line))
{
lines.push_back(line);
}
}
}
for (unsigned int j=0; j<lines.size(); j++)
{
cout << lines[j] << endl;
}
我的输出是
I am here
test.txt
file failed to open
X3
我真的不明白,因为当file.open(argv2.c_str());
代替string filename
而argv2
工作时{{1}}有效,但它们都是字符串......对吗?
-f test.txt文件位于我的项目文件夹下,test.txt位于Debug文件夹下。我还在程序参数中添加了-f test.txt。
答案 0 :(得分:3)
我认为您应该将文件重命名为test.txt
,而不是-f test.txt
。
似乎认为-f
部分应该被解释为命令,而不是文件名的一部分。
答案 1 :(得分:2)
如果从像Visual Studio这样的IDE运行,那么运行时的默认当前目录是不是可执行文件,而是项目根目录。
将参数更改为-f Debug\test.txt
,或将文件移动到项目根目录。