2010-07-29 112 views
4

我知道,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

回答

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提供了一個文件系統類來抽象所有主要操作系統的文件系統。它有助於瞭解它如何工作,而不是將文件表示爲字符串;當您構建複雜路徑時(例如帶有空格的路徑),字符串表示可能會輕微出錯。嵌入到其中的字符。

+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

5

這裏有一個簡單的辦法做到這一點在Linux上。

string path(getenv("HOME")); 
path += "/Desktop/example.txt"; 
ofstream outf(path); 
2
char szPath[MAX_PATH] = {0}; 
    SHGetSpecialFolderPath(NULL, 
         szpath, 
         CSIDL_DESKTOPDIRECTORY, 
         FALSE); 
    strcat(szPath,"\\Test.txt"); 

    ofstream out; 
    out.open(szPath);