用c ++在桌面上创建文件

时间:2010-07-29 05:12:54

标签: c++

我知道要用c ++创建文件,我们使用以下代码

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ofstream out;
    out.open("exemple.txt");
    return 0;
}

我的问题如下,我想在桌面或其他目录中创建example.txt文件。为了简化它,我们现在就采用桌面。

请帮我怎么做?

喜欢这个吗?

out.open("example.txt","C:\Users\David\Desktop");

4 个答案:

答案 0 :(得分:7)

代码的主要问题是'\'是C / C ++中的转义字符。

所以当你输入字符串时:"C:\Users\David\Desktop"斜杠正在转义下一个字符,因此它们实际上不是字符串的一部分,可执行文件得到的是"C:UsersDavidDesktop"来补偿这个字符有两个备选方案:

  • 使用斜杠'\\'的转义序列,从而为您提供:"C:\\Users\\David\\Desktop"
  • 或使用'/'字符分隔路径中的目录。
    • 我个人更喜欢这个选项,因为它现在可以在所有现代操作系统之间移植。 (赢/ Linux的/ MAC)

您的第二个问题是您使用的打开方式不正确。只需将路径名称指定为1个长字符串(这称为绝对路径)。我个人更喜欢将文件名提供给构造函数而不是显式调用open(但这只是个人偏好)。

#include <fstream>
int main()
{
    std::ofstream out1("C:\\Users\\David\\Desktop\\exemple1.txt");

    std::ofstream out2("C:/Users/David/Desktop/exemple2.txt");
}

小调。硬编码桌面目录的路径不是好习惯。您正在将应用程序紧密地耦合到该版本的OS如何布局文件系统。每个操作系统通常提供有关如何查找用户目录的技术,请参阅操作系统文档以获取更多详细信息(或在StackOverflow上询问另一个问题)。

另请注意,boost提供了一个文件系统类来抽象所有主要操作系统的文件系统。它有助于了解它是如何工作的,而不是将文件表示为字符串;当您构建复杂路径(例如,带空格的路径)时,字符串表示可能会略微出错。嵌入其中的字符。

答案 1 :(得分:5)

这是在Linux上直接进行此操作的方法。

string path(getenv("HOME"));
path += "/Desktop/example.txt";
ofstream outf(path);

答案 2 :(得分:2)

使用SHGetSpecialFolderPath函数获取当前用户的桌面文件夹路径 http://msdn.microsoft.com/en-us/library/bb762204%28VS.85%29.aspx

答案 3 :(得分:2)

    char szPath[MAX_PATH] = {0};
    SHGetSpecialFolderPath(NULL,
                       szpath,
                       CSIDL_DESKTOPDIRECTORY,
                       FALSE);
    strcat(szPath,"\\Test.txt");

    ofstream out;
    out.open(szPath);