2011-06-20 192 views
0

我的程序已運行正常一年多。今天,我將這些文件複製到不同的系統上並編譯了每個程序。無法寫入文件

當我編譯並從Dev-C++運行時,它將數據寫入文本文件,但是當它點擊它創建的可執行文件時,它不會將數據寫入文件。像輸入/輸出一樣的其他東西似乎工作。

我錯過了什麼程序?

好吧,我已經給了程序完全permision,但它仍然不寫。

我很困惑,至少如果它沒有運行,當我在C++環境中編譯它時,我可以繼續檢查我的代碼,但只有.exe不起作用,還有其他建議嗎?

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() { 
ofstream bss2; 
bss2.open("expat.txt",ios::app); 
bss2 << 2 ; 
bss2.close(); 
} 

這是我測試出來的示例代碼。

我如何找到當前工作目錄?

好吧,我改了行

bss2.open("c:\\expat2.txt",ios::app); 

,現在它工作正常的exe文件。

但有超過50個文件,我更喜歡我沒有拼出每個新的路徑,有什麼解決方法是將目錄設置爲以前使用的?

更新4:

#define _POSIX_SOURCE 
#include <unistd.h> 
#undef _POSIX_SOURCE 
#include <stdio.h> 

main() { 
    char cwd[256]; 
    int y; 
    if (chdir("/tmp") != 0) 
    perror("chdir() error()"); 
    else { 
    if (getcwd(cwd, sizeof(cwd)) == NULL) 
     perror("getcwd() error"); 
    else 
     printf("current working directory is: %s\n", cwd); 
    } 
    scanf(y); 
} 

好吧,我使用的GETCWD(),這是它給了我

的chdir()錯誤()消息:沒有這樣的文件或目錄

如何我現在設置目錄嗎?

+1

用戶權限替換open("?你在運行什麼操作系統? – Joe

+0

魔法部分?對不起,忍不住用你的用戶名...;) – Nim

+1

任何錯誤信息? –

回答

0

最好也是最簡單的方法是給出輸出文件的完整路徑而不僅僅是文件名。這樣,您就可以確定文件的位置,而不必到處搜索。如果您使用Windows,則輸出文件可能位於system32中的某處。但我可能是錯的。

+0

你是對的。剛剛檢查過system32和所有的.txt文件都坐在那裏。現在我該如何改變它? – Asterix

+0

給出了輸出文件的完整路徑,而不僅僅是文件名。 –

+0

不幸的是,在50個C++文件中,每個文件都有20多個文本文件,我不得不改變它的工作方式。我還可以做些什麼 ? – Asterix

1

我還沒有雷蒙德的心理調試權力,但我知道一個工具,可以幫助你:Process Monitor。用它來精確地查看應用程序試圖寫入哪些文件,以及它失敗的原因。

+0

心靈調試權力? – YXD

+2

@Mr E:http://www.google.com/search?hl=en&q=raymond+chen+psychic+debugging –

2

當您雙擊文件時,您的工作目錄沒有正確設置。如果您可以訪問日誌,請使用getcwd()並記錄它返回的內容。

+0

好吧,我用了getcwd(),它告訴我沒有這樣的文件或工作目錄。我如何使它合適。 – Asterix

+0

不,你用chdir(「/ tmp」),它告訴你/ tmp不存在。如果你在Windows系統上運行,你需要chdir(「c:\\ tmp」),假設c:\ tmp確實存在。 – damian

1

也許你看着錯誤的位置。該程序將文件寫入當前工作目錄,當您雙擊可執行文件並從Dev-C++運行時,該目錄可能會有所不同。

+0

我如何找到當前工作目錄? – Asterix

+0

檢查達米安答案 – Dikei

0

正如其他人所說,工作目錄可能不正確。

如果您創建.exe的快捷方式,則可以在快捷方式屬性中設置工作目錄。右鍵單擊快捷方式,選擇「屬性」,然後更改「開始」屬性。

當然,更好的答案是在打開文件時將文件的完整路徑放入文件名字符串中。

+0

財產的開始設置正確不幸。 – Asterix

+0

@Asterix,那麼我必須得出結論,你沒有適當的權限寫入目錄。 Windows 7在可以創建文件的地方添加了許多限制。 –

0

這可能是Windows使用反斜槓,所以請嘗試「\ tmp」而不是「/ tmp」。

另外,如果您的所有文件在同一目錄中,那麼你可以使用find &替換,並與open("c:\\your_directory_here\