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

时间:2010-01-24 21:51:06

标签: c++ windows

我有一个程序可以创建一个文件并使用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;
}

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

4 个答案:

答案 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来指定输出文件。