2012-01-30 20 views
4

這是我第一次在Windows中編寫C代碼,一個奇怪的bug讓我瘋狂。fopen和windows

我試圖用fopen打開一個.txt文件,它一直給我「文件不存在」的錯誤(它也給了我一次「沒有權限」的錯誤)。

我的代碼如下所示(沒有得到任何簡單的比):

FILE *file; 

if((file=fopen("C:\\Users\\ste\\Desktop\\file.txt", "r"))==NULL) 
{ 
    printf("Cannot open file.\n"); 
    puts(strerror(errno)); 

    getchar(); 
    exit(1); 
} 

我在這裏失去了一些東西?提前致謝!

+3

那麼,該文件是否存在,你有權讀取它? ;) – 2012-01-30 14:59:28

+0

'「r」'打開閱讀文件:它確實存在嗎? – hmjd 2012-01-30 14:59:40

回答

13

我敢打賭,你有Windows「隱藏擴展名」 錯誤 功能打開。因此,名爲「file.txt」的文件將作爲「文件」出現在資源管理器中。如果它在資源管理器中顯示爲「file.txt」,則必須在硬盤上命名爲「file.txt.txt」。

+0

+1哈哈,就是這樣!非常適合他的非答案! – 2012-01-31 18:20:17

1

該代碼本身很好,假設它所做的就是你想要的。

「r」要求文件已經存在(它不會爲你創建一個),所以你需要確保路徑是正確的。桌面路徑是否正確,而不是另一個驅動器等?

如果由「ste」以外的用戶執行權限錯誤,或當然如果某事如何更改了該文件路徑上的權限以及如何防止訪問,則會發生權限錯誤。

+0

好..文件存在,我是用戶ste,這意味着我應該能夠訪問我的桌面上的文件,不是嗎? :) 它可能是任何權限衝突,因爲我通過Visual Studio構建它?... – STE 2012-01-30 18:21:17

-1

我使用Windows 7. 當我從IDE內啓動示例程序(如Code :: Blocks中的CTRL + F10)時,它們都不起作用 - 有或沒有文件擴展名(ig「file」或「file.txt 「)。

但是,如果我從控制檯內啓動編譯程序(與IDE無關)它的工作原理是,無論文件是否具有擴展名。