2012-07-13 143 views
12

我試圖做一個程序來計算一個文件的行數,當我嘗試將絕對路徑傳遞給fopen函數時,簡單地告訴我這是沒有找到,這裏是我的代碼:用fopen打開文件,在Windows上給出絕對路徑

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    int i=0; 
    char array[100]; 

     char caracteres[100]; 
     FILE *archivo; 
     archivo = fopen("C:\Documents and Settings\juegos psps.txt","r"); 
     if (archivo == NULL){cout<<"Dont Work";} 
     while (feof(archivo) == 0) 
     { 
       fgets(caracteres,100,archivo); 
       i++; 
       } 
       cout << "Number of lines:" << i ; 
       return 0; 
} 

我應該如何傳遞的絕對路徑,以我的程序,所以你可以打開該文件?

+0

嘗試 「C:\\ Documents和Settings \\ JUEGOS psps.txt」 – Jeeva 2012-07-13 07:39:28

+0

或' 「C:/ Documents和設置/ JUEGOS psps.txt」',它也適用。 – 2012-07-13 08:43:17

回答

17

使用雙斜線:

"C:\\Documents and Settings\\juegos psps.txt" 
+0

@SingerOfTheFail我已經嘗試過,但仍然不能正常工作,可能取決於我的操作系統的版本?我一直堅持這個小時。 – franvergara66 2012-07-13 07:44:00

+0

@ Melkhiah66,你正在運行你的程序的操作系統?另外,你確定文件名中沒有錯別字(比如可能有多餘的空格)? – SingerOfTheFall 2012-07-13 07:49:14

+0

@SingerOfTheFail Im在Windows 7中運行程序,使用code :: blocks,而不是在文件名 – franvergara66 2012-07-13 07:53:22

6

它不工作,因爲編譯器會檢查一個字符串的下一個字符一個反斜槓在一起,通常會將它們解釋爲在所有一個字符。字符串文字中的這種雙字序列被稱爲轉義序列

序列\D\j沒有映射到任何東西(與\n其映射到換行符對比這一點),而在這種情況下,標準指出,編譯器可以將其解釋爲它選擇。一些編譯器選擇忽略反斜槓,而你的情況會導致相當於:

archivo = fopen("C:Documents and Settingsjuegos psps.txt","r"); 

(你可以嘗試創建一個文件,這個名字來測試,如果這是你的編譯器做什麼)。

反斜槓正確的轉義序列是一個雙反斜線,所以你應該把它寫成

archivo = fopen("C:\\Documents and Settings\\juegos psps.txt","r"); 
+0

是的人,我知道。問題是,當我把雙斜槓的路徑正如我無法打開文件和程序進入條件if(file == NULL) – franvergara66 2012-07-13 07:48:15

+1

@ Melkhiah66:如果正確指定了文件名,代碼沒有問題,所以你應該看看文件是否在那裏,權限等 – Jon 2012-07-13 07:53:28

1

檢查空間中的文件名。斜線正確地逃脫了,但空白區域沒有。

嘗試:

fopen("C:\\\\Documents\ and\ Settings\\\juegos psps.txt","r")

+0

任何人都應該得到至少2個名譽,即使對於那些不太多的答案... – 2013-09-04 18:36:39

2

工程,以及在Windows和Linux:/,而不是逃避反斜槓\\

"C:/dir1/dir2/file.ext" 
-1

鑑於所有代碼和路徑鍵入正確,導致另一種可能的原因fopen不起作用可能是你的項目屬性 - > C/C++代碼生成 - >運行時庫設置爲/ MD而不是/ MDd用於調試版本,這個設置應該對應於項目配置,XX爲Release XX(d)爲Debug

0

使一個新的文件夾中的代碼塊在項目文件夾文件夾

旁邊的主頭文件做出新的文件「exemple1」,並把您的文件在其「file.txt的」,然後

string nom_fichier; 
nom_fichier = "exemple1/file.txt" ; 
fichier = fopen(nom_fichier.c_str(), "r+"); 
+0

雖然這段代碼可能回答這個問題,但提供了關於爲什麼和/或這個代碼如何回答這個問題會提高它的長期價值。 – rollstuhlfahrer 2018-03-06 15:50:09

相關問題