使用c中的文件路径打开文件

时间:2012-02-29 11:50:39

标签: c directory fopen filepath

我有一个文件,其中包含目录和子目录中所有文件的列表路径和其他相关信息。其部分内容最后给出。 我的问题是:

我试图读取此文件并打开列表中的所有文件,如下所示。他们都没有在开幕式上取得成功。

部分代码: 我使用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:\ papers \ 06_un_ict_task_force_african_development_status.pdf

     

298547 4ba159f5b1123a89c118bb5814af13f9 E:\ papers \ 10.1.1.119.6128.pdf

     

1639991 a60672ae9f88c0c1ab2d33bac68572c6 E:\ papers \ 20100602_roger_mcilmoyle_sungard.pdf

     

501015 0d6a4cace5815c82a2627e52bb5ae6e9 E:\ papers \ a云存储多样性案例.pdf

还有更多:

如何从这些文件路径中删除文件扩展名,以便将它们用作文件名

编辑: 我得到的错误是

  

错误代码2,无法找到文件或目录

编辑:

这是我得到的实际输出

  

输入包含文件列表fileinfo.txt

的文件名      

无法打开   文件E:\ papers(├â├ó┬╖├æ)┬ú┬║SOA+ with + .NET +和+ Windows + Azure00018 .pdf   阅读,错误代码22!

     

无法打开文件   E:\ papers \ 06_un_ict_task_force_african_development_status.pdf for   阅读,错误代码22!

编辑: VC2010需要使用双斜杠代替目录遍历的单斜杠

1 个答案:

答案 0 :(得分:2)

如果您在Windows上执行所有操作,并且您的文本文件(file_list)具有Windows行结尾,则strtok无法拆分文件中的行(Windows行结尾为:\ r \ n):所以strtok会给你 file_path \ r

解决方案:以文本模式阅读文件列表文件:FILE *flist=fopen(file_list,"r+t")

我也会建议:

  1. file_path更长(至少256)
  2. 检查strtok返回的内容(如果文件中的某行没有足够的令牌,那么它可以返回 NULL ,然后你就会被抛弃:)。