Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c+在桌面上创建文件+; 我知道,在C++中创建一个文件,我们使用下面的代码< /p> #include <iostream> #include <fstream> using namespace std; int main() { ofstream out; out.open("exemple.txt"); return 0; }_C++ - Fatal编程技术网

用c+在桌面上创建文件+; 我知道,在C++中创建一个文件,我们使用下面的代码< /p> #include <iostream> #include <fstream> using namespace std; int main() { ofstream out; out.open("exemple.txt"); return 0; }

用c+在桌面上创建文件+; 我知道,在C++中创建一个文件,我们使用下面的代码< /p> #include <iostream> #include <fstream> using namespace std; int main() { ofstream out; out.open("exemple.txt"); return 0; },c++,C++,使用SHGetSpecialFolderPath函数获取当前用户中的桌面文件夹路径 这里有一种在Linux上直接实现的方法 string path(getenv("HOME")); path += "/Desktop/example.txt"; ofstream outf(path); 代码的主要问题是“\”是C/C++中的转义字符 因此,当您放置字符串:“C:\Users\David\Desktop”时,斜杠将转义下一个字符,因此它们实际上不是字符串的一部分,而可执行文件得到的是“C:Use

使用SHGetSpecialFolderPath函数获取当前用户中的桌面文件夹路径

这里有一种在Linux上直接实现的方法

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

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

因此,当您放置字符串:
“C:\Users\David\Desktop”
时,斜杠将转义下一个字符,因此它们实际上不是字符串的一部分,而可执行文件得到的是
“C:UsersDavidDesktop”
为了补偿这一点,有两种选择:

  • 使用斜杠的转义序列
    '\\'
    ,这样就得到了:
    “C:\\Users\\David\\Desktop”
  • 或者使用
    '/'
    字符分隔路径中的目录。

    • 就我个人而言,我更喜欢这个选项,因为它现在可以在所有现代操作系统之间移植。(Win/Linux/MAC)
您的第二个问题是错误地使用open。只需将路径名指定为1个长字符串(这称为绝对路径)。就个人而言,我更喜欢向构造函数提供文件名,而不是显式调用open(但这只是个人偏好)

#包括
int main()
{
std::ofstreamout1(“C:\\Users\\David\\Desktop\\example1.txt”);
std::ofstreamout2(“C:/Users/David/Desktop/example2.txt”);
}
小音符。硬编码桌面目录的路径不是一种好的做法。您将应用程序与该版本的操作系统如何布局文件系统紧密耦合。每个操作系统通常都提供了一种如何查找用户目录的技术。有关更多详细信息,请参阅操作系统文档(或询问有关StackOverflow的其他问题)


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

提供桌面路径以及open方法中的文件名。“我个人更喜欢这个选项,因为它现在可以在所有现代操作系统之间移植。(Win/Linux/MAC)“我不知道这一点,我真的很高兴我发现了这一点。那会派上用场的,谢谢@Jeremy Kemball:如果使用boost文件系统类,这是抽象的。所以请检查一下。当涉及到路径名时,有许多操作系统/文件系统特定的功能,这绝对值得使用boost系统,因为您将与所有差异隔离开来。我只听说过boost的好东西,所以我也可以。@RishavJain是的
    char szPath[MAX_PATH] = {0};
    SHGetSpecialFolderPath(NULL,
                       szpath,
                       CSIDL_DESKTOPDIRECTORY,
                       FALSE);
    strcat(szPath,"\\Test.txt");

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

    std::ofstream out2("C:/Users/David/Desktop/exemple2.txt");
}
    char szPath[MAX_PATH] = {0};
    SHGetSpecialFolderPath(NULL,
                       szpath,
                       CSIDL_DESKTOPDIRECTORY,
                       FALSE);
    strcat(szPath,"\\Test.txt");

    ofstream out;
    out.open(szPath);