我有一个程序可以创建一个文件并使用ofstream写入它。我需要程序以后能够解析命令行参数。但由于某种原因,当我将文件拖放到已编译的可执行文件时,它不会创建文件,即使程序根本不涉及任何命令行参数。如果可执行文件正常运行,则可以正常运行。所以我完全糊涂了。这是来源:
#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;
}
有人有什么想法吗?我感谢任何帮助。
答案 0 :(得分:1)
您根本没有使用命令行参数。将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;
}
小心丢弃的内容,代码会重写文件内容。
答案 1 :(得分:1)
以下代码执行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;
}
它允许拖放,但不会在打开的文件中使用删除的文件名。当您删除文件时,您会收到消息
“写文件”
不幸的是,目前我不知道在哪里它写了文件 - 当然不是在当前目录中。只是去做搜索...
修改:在文档和设置目录中创建它。所以要把它放在当前目录中,你可能需要用“./”明确地加上前缀,但我还没有测试过这个 - 我把它作为读者的练习: - )
答案 2 :(得分:0)
您没有为“test.txt”指定路径,因此它会尝试在可执行文件的当前工作目录中创建该文件。当通过删除文件而不是正常运行程序时调用exe时,这将有所不同。
尝试给“test.txt”一个完整路径,看看是否有效。
编辑: 要将输出文件写入包含exe的路径,可以使用
GetModuleFileName(NULL, ...)
到exe的完整路径,
然后PathRemoveFileSpec
剥离exe名称,然后只留下exe路径
PathCombine
将test.txt附加到exe路径
答案 3 :(得分:0)
由于您尚未指定路径,因此文件test.txt将保存到默认路径。只需打开命令提示符(即运行cmd.exe),命令提示符将显示默认路径。该文件应位于此目录中。
您可以通过编辑HOMEDRIVE&amp;更改默认路径。 HOMEPATH环境变量。
另外,你应该注意其他答案。您应该使用argc / argv来指定输出文件。