我有以下主要方法:
int main(string argf)
{
ifstream exprFile(argf);
string inExpr;
if (exprFile.is_open())
{
while ( getline(exprFile,inExpr) )
{
//do stuff
}
exprFile.close();
}
else cout << "Unable to open file";
system("pause"); // to wait for user input; allows the user to see what was printed before the window closes
return 0;
}
我已使用以下命令从命令行运行此程序:
最后两个args.txt与可执行文件位于同一目录中。所有四个都给出了“无法打开文件”的结果。在对它做任何事情之前尝试打印argf
值都没有产生任何结果。完全空白的打印声明。
然后我进入了Visual Studio 2010选项,并在其中的参数部分下添加了args.txt
文件的所有变体,文件位于不同的位置,并且没有任何效果。
我做错了什么?
你应该如何在命令行上打开作为参数传递的文件?
答案 0 :(得分:2)
int main ( int argc, char *argv[] )
这是从main
获取参数的正确方法。
argc
是参数的数量。 argv
是参数列表。
实际参数将以index = 1.
开头index 0
处的值始终为程序名称。
在您的示例中,
“C:\ Complete Filepath \ Project2.exe”“C:\ Differnt Filepath \ args.txt”
argc = 2
argv[0] = "Project2.exe"
argv[1] = "C:\Differnt Filepath\args.txt"
答案 1 :(得分:0)
是的,代码!
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
ifstream exprFile;
string inExpr;
for( int i = 1; i < argc; i++) { // 0 is the program name
exprFile.open(argv[i]);
if (exprFile.is_open()) {
while ( getline(exprFile,inExpr) ) {
cout << "Doing stuff on line: " << inExpr << "\n";
}
exprFile.close();
}
else cout << "Unable to open file " << argv[i];
}
}