找不到C ++命令行参数(文件)?

时间:2014-03-05 02:56:37

标签: c++ file command-line arguments

我有以下主要方法:

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;
}

我已使用以下命令从命令行运行此程序:

  • “C:\ Complete Filepath \ Project2.exe”“C:\ Differnt Filepath \ args.txt”
  • C:\ Complete Filepath \ Project2.exe C:\ Differnt Filepath \ args.txt
  • “C:\ Complete Filepath \ Project2.exe”“args.txt”
  • C:\ Complete Filepath \ Project2.exe args.txt

最后两个args.txt与可执行文件位于同一目录中。所有四个都给出了“无法打开文件”的结果。在对它做任何事情之前尝试打印argf值都没有产生任何结果。完全空白的打印声明。

然后我进入了Visual Studio 2010选项,并在其中的参数部分下添加了args.txt文件的所有变体,文件位于不同的位置,并且没有任何效果。

我做错了什么?

你应该如何在命令行上打开作为参数传递的文件?

2 个答案:

答案 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];
   }
}