2014-10-01 275 views
0

我想用下劃線替換空格字符並重命名目錄中的文件名。一切看起來不錯,但重命名操作不重命名文件。重命名文件名C++

DIR *dir; 
char *directoryPath = "E:\\markdown-here.wiki\\LeetCode_problems_solution\\"; 
struct dirent *ent; 
if ((dir = opendir (directoryPath)) != NULL) { 
    while ((ent = readdir (dir)) != NULL) { 
     char *filename; 
     for(int i = 0; i < strlen(ent->d_name); ++i) { 
      if(ent->d_name[i] == ' ') 
       filename[i] = '_'; 
      else filename[i] = ent->d_name[i]; 
     } 
     filename[strlen(ent->d_name)] = '\0'; 

     // output: Error renaming file: No such file or directory 
     int result = rename(ent->d_name, filename); 
     if(result == 0) puts ("File successfully renamed"); 
     else perror("Error renaming file"); 

     // this works 
     printf ("%s, %s\n", ent->d_name, filename); // foo bar, foo_bar 
    } 
    closedir (dir); 
} else { 
    /* could not open directory */ 
    perror (""); 
    return EXIT_FAILURE; 
} 

這裏有什麼問題?

+0

你從'perror'得到什麼信息? – 2014-10-01 22:23:08

+0

重命名文件時出錯:沒有這樣的文件或目錄 – 2014-10-01 22:23:23

+0

變量filename沒有初始化,甚至沒有初始化 – kotlomoy 2014-10-01 22:24:09

回答

2

的主要問題是,你必須:

char *filename; 

,但它尚未分配的內存。您遇到未定義的行爲。

嘗試

char filename[1000]; // Or something large enough. 

此外,您使用rename的方式,它只會在當前目錄設置爲directoryPath工作,否則ent->d_name是不是一個有效的文件名。

您可以chdirdirectoryPath或在參數rename中使用絕對路徑。

+0

感謝您的回答。我改變了它,但沒有工作:( – 2014-10-01 22:26:49

+0

@KaidulIslam,看到我的更新 – 2014-10-01 22:36:32

+0

謝謝!不是添加絕對路徑前綴,我已經從同一目錄執行此源文件,現在它工作! – 2014-10-01 22:40:27