Windows拖放控制台应用程序的问题

我有一个程序创build一个文件,并使用ofstream写入。 我需要程序能够稍后parsing命令行参数。 但是由于某些原因,即使程序没有涉及任何命令行参数,当我将文件拖放到编译的可执行文件时,也不会创build文件。 如果可执行文件正常运行,则可以运行。 所以我完全糊涂了 这里是来源:

#include <iostream> #include <fstream> using namespace std; int main () { ofstream outfile; outfile.open("test.txt"); if(outfile.is_open()) { outfile << "Test"; outfile.close(); } else cout << "Unable to open file"; return 0; } 

有人有什么想法吗? 我感谢任何帮助。

你根本没有使用命令行参数。 重新编写你的main()方法如下所示:

 int main(int argc, char** argv) { if (argc != 2) { cout << "Usage: blah.exe file" << endl; return 1; } ofstream outfile; outfile.open(argv[1]); if(outfile.is_open()) { outfile << "Test"; outfile.close(); } else cout << "Unable to open file"; return 0; } 

小心你放弃了什么,你的代码重写了文件内容。

下面的代码做OP所需要的:

 #include <iostream> #include <fstream> using namespace std; int main ( int argc, char ** argv ) { cout << argv[1] << endl; ofstream outfile; outfile.open("testzzzzzzz.txt"); if(outfile.is_open()) { outfile << "Testzzzzz"; outfile.close(); cout << "wrote file"<< endl; } else cout << "Unable to open file"; string s; getline( cin, s ); return 0; } 

它允许拖放,但不会在打开的文件中使用已删除的文件名。 当你放入一个文件,你会得到这个消息

“写文件”

不幸的是,目前我不知道在哪里写了文件 – 当然不在当前目录中。 只要做一个搜索…

编辑:它在您的文档和设置目录中创建它。 因此,把它放在当前目录中,你可能需要明确地以“./”作为前缀,但我没有测试过这个 – 我把它作为读者的练习:-)

由于您没有指定路径,文件test.txt将被保存到默认路径。 只需调出命令提示符(即运行cmd.exe),命令提示符就会显示默认路径。 该文件应该在这个目录中。

您可以通过编辑HOMEDRIVE&HOMEPATH环境变量来更改默认路径。

另外,你应该注意其他的答案。 你应该使用argc / argv来指定输出文件。

你还没有指定“test.txt”的路径,所以它会尝试在可执行文件的当前工作目录中创建该文件。 当通过删除文件而不是正常运行程序时,这将是不同的。

尝试给“test.txt”一个完整的路径,看看是否有效。

编辑:要将输出文件写入包含exe的路径,您可以使用

GetmoduleeFileName(NULL, ...)到exe的完整路径,然后PathRemoveFileSpec剥离exe名称,只留下exe路径,然后PathCombine将test.txt附加到exe路径