C語言rename()函式:重新命名檔案或目錄

cherish_2012發表於2014-08-02
標頭檔案:#include <stdio.h>

函式rename()用於重新命名檔案、改變檔案路徑或更改目錄名稱,其原型為
    int rename(char * oldname, char * newname);

【引數】oldname為舊檔名,newname為新檔名。

【返回值】修改檔名成功則返回0,否則返回-1。

重新命名檔案:
  • 如果newname指定的檔案存在,則會被刪除。
  • 如果newname與oldname不在一個目錄下,則相當於移動檔案。

重新命名目錄:
  • 如果oldname和oldname都為目錄,則重新命名目錄。
  • 如果newname指定的目錄存在且為空目錄,則先將newname刪除。
  • 對於newname和oldname兩個目錄,呼叫程式必須有寫許可權。
  • 重新命名目錄時,newname不能包含oldname作為其路徑字首。例如,不能將/usr更名為/usr/foo/testdir,因為老名字( /usr/foo)是新名字的路徑字首,因而不能將其刪除。

【例項】一個簡單的修改檔名的程式。
  1. #include<stdio.h>
  2. #include <fcntl.h>
  3. int main(void)
  4. {
  5. char oldname[100], newname[100];
  6. /* prompt for file to rename and new name */
  7. printf("請告訴我一個檔案的完整路徑: ");
  8. gets(oldname);
  9. printf("您想修改為: ");
  10. gets(newname);
  11. /* 更改檔名 */
  12. if (rename(oldname, newname) == 0)
  13. printf("已經把檔案 %s 修改為 %s.\n", oldname, newname);
  14. else
  15. perror("rename");
  16. return 0;
  17. }
#include<stdio.h>
#include <fcntl.h>
int main(void)
{
    char oldname[100], newname[100];
    /* prompt for file to rename and new name */
    printf("請告訴我一個檔案的完整路徑: ");
    gets(oldname);
    printf("您想修改為: ");
    gets(newname);
    /* 更改檔名 */
    if (rename(oldname, newname) == 0)
        printf("已經把檔案 %s 修改為 %s.\n", oldname, newname);
    else
        perror("rename");
    return 0;
}
執行結果:
請告訴我一個檔案的完整路徑:test.ncb
您想修改為:test111.ncb
已經把檔案test. ncb修改為test111. ncb

例子首先定義兩個陣列儲存使用者指定的檔名, 接著使用函式gets()接收使用者輸入的檔名,再使用函式rename()修改,如果成功則返回值為0,提示修改成功。

注意:實際開發中儘量避免使用gets()函式,gets()會影響程式的安全性和健壯性,請檢視:C語言gets()函式:從流中讀取字串

又如,設計一個在DOS命令列下修改檔案的程式。
  1. #include <stdio.h>
  2. void main(int argc, char **argv)
  3. {
  4. if(argc < 3)
  5. {
  6. printf("Usage: %s old_name new_name\n", argv[0]);
  7. return;
  8. }
  9. printf("%s=>%s", argc[1], argv[2]);
  10. if(rename(argv[1], argv[2]) < 0)
  11. printf("error!\n");
  12. else
  13. printf("ok!\n");
  14. }

相關文章