上在C桌面++

上在C桌面++

问题描述:

我知道,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"); 
+1

在open方法中提供桌面路径和文件名。 – naivnomore 2010-07-29 05:15:54

您的代码的主要问题是'\'是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文档以获取更多详细信息(或者在*上提出另一个问题)。

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

+0

“我个人更喜欢这个选项,因为它可以在所有现代操作系统之间移植(Win/Linux/MAC)”我不知道这一点,我真的很高兴我发现了这一点。这将派上用场,谢谢! – 2010-07-29 06:24:48

+0

@Jeremy Kemball:如果你使用boost文件系统类,它将被抽象出来。所以请检查一下。当涉及到路径名称时,有许多操作系统/文件系统特有的功能,绝对值得使用升压系统,因为您将不受所有差异的影响。 – 2010-07-29 06:28:31

+0

我没有听到任何关于提升的好消息,所以我也可以。 – 2010-07-30 04:57:40

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

这里有一个简单的办法做到这一点在Linux上。

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

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

    ofstream out; 
    out.open(szPath);