2012-02-29 104 views
0

我有一個文件,其中包含目錄和子目錄中所有文件的列表路徑和其他相關信息。它的部分內容在最後給出。 我的問題是:使用c中的文件路徑打開文件

我試圖讀取此文件並按如下所示打開列表中的所有文件。他們都沒有成功開幕。

部分代碼: 我用strtok()切出的文件的信息的其他部分

char *token=NULL; 
unsigned long file_size; 
char file_fp[33]; 
char file_path[150]; 
char fname_buffer[1024]; 
char file_list[32]; 
std::cout<<"Enter file name containing the file list\n"; 
std::cin>>file_list; 
FILE *flist=fopen(file_list,"r+b"); 
if(!flist) 
{ 
    std::cout<<"Could not open "<<file_list<< 
    " for reading\n Please rerun the program and enter the correct file name."; 
    return(1); 
} 
else while(fgets(fname_buffer,1024,flist)) 
{ 
    // if ('\n' != fname_buffer[0]) 
     token = strtok(fname_buffer," ,\t"); 
    file_size=atol(token); 

    // if ('\n' != fname_buffer[0]) 
     token = strtok(NULL, " ,\t"); 
    strncpy((char*)file_fp,token,32); 

    // if ('\n' != fname_buffer[0]) 
     token = strtok(NULL, "\n"); 
    strcpy(file_path,token); 

    FILE *input_file=fopen(file_path, "r+b"); 

    if(input_file == NULL) 
    { 
     fprintf(stderr, 
       "Could not open file %s for reading, error code %d!\n", 
       token, 
       errno); 
     continue; 
    } 

........

局部file_list中的文件內容:

1883408 5291b5e9c117677f34fe39ac72983eba E:\ papers(êÑ)ºSOA+ with + .NET + and + Windows + Azure00018.pdf

474231 a6f96231c62bd457c5f06201553a468f E:\文件\ 06_un_ict_task_force_african_development_status.pdf

298547 4ba159f5b1123a89c118bb5814af13f9 E:\文件\ 10.1.1.119.6128.pdf

1639991 a60672ae9f88c0c1ab2d33bac68572c6 E:\文件\ 20100602_roger_mcilmoyle_sungard.pdf

501015 0d6a4cace5815c82a2627e52bb5ae6e9 E:\論文\雲存儲多樣性案例.pdf

多:

我怎麼才能把這些文件路徑的文件擴展名,以使用它們作爲文件名

編輯: 我得到的錯誤是

錯誤代碼2,文件或目錄找不到

編輯:

這是實際的輸出我得到

輸入文件名包含文件列表fileinfo.txt

無法打開 文件E:\文件(├â├ó┬╖├æ)┬ú┬║SOA+與+ .NET +和+ Windows + Azure00018 .pdf 供閱讀,錯誤代碼22!

無法打開文件 E:\文件\ 06_un_ict_task_force_african_development_status.pdf爲 閱讀,錯誤代碼22!

編輯:使用雙斜槓來代替單斜槓的目錄遍歷

+0

從fopen中得到什麼錯誤?文件名是否正確? – 2012-02-29 11:54:37

+0

@JoachimPileborg:看到編輯 – John 2012-02-29 12:00:16

+0

什麼是在'如果(INPUT_FILE == NULL)'分支顯示在fprintf中'()'語句中的文件的路徑? – hmjd 2012-02-29 12:09:21

回答

2

如果你正在做的這一切在Windows,和您的文本文件(file_list)需要 VC2010具有窗口行結束,然後strtok的是不能將文件中的行拆分(Windows行的結局是:\ r \ n)的:這樣的strtok會給你FILE_PATH \ r

解決方案:閱讀文本模式下的文件列表中的文件:FILE *flist=fopen(file_list,"r+t")

我也建議:

  1. 讓您file_path較長(至少256)
  2. 檢查什麼strtok回報(它可以返回NULL如果你的文件中的某行沒有足夠的標記,然後你被投入:))
+0

它仍然給出相同的錯誤 – John 2012-02-29 12:15:11

+0

嘗試:'FILE * input_file = fopen(file_path,「rb」)' – sirgeorge 2012-02-29 12:29:25

+0

這是行不通的 – John 2012-02-29 12:31:02