在C语言中,使用stdio.h头文件提供的remove()函数可删除文件(返回0表示成功),rename()函数可重命名文件(需在同一文件系统内,返回0表示成功),二者均需传入文件路径参数,操作失败时返回非0值。

在C语言中,文件操作是程序与外部存储交互的重要部分。要删除文件和重命名文件,可以使用标准库函数remove()rename()

1. 删除文件:remove()函数

函数原型

int remove(const char *filename);

用法说明

  • 用于永久删除指定的文件(不会移到回收站)
  • 返回值:0表示成功,-1表示失败
  • 需要包含头文件stdio.h
  • 不能删除目录(删除目录需使用rmdir()

示例代码

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

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "用法: %s <要删除的文件名>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    const char *filename = argv[1];
    int result = remove(filename);

    if (result == 0) {
        printf("文件 '%s' 删除成功!\n", filename);
    } else {
        perror("文件删除失败");
        fprintf(stderr, "错误:无法删除文件 '%s'。\n", filename);
    }

    return 0;
}

使用注意事项

  • 文件必须存在,否则会返回错误
  • 需要对文件所在目录有写权限
  • 无法删除正在被其他进程打开的文件

2. 重命名文件:rename()函数

函数原型

int rename(const char *oldpath, const char *newpath);

用法说明

  • 用于重命名文件(在同一文件系统下,重命名和移动是等价的)
  • 返回值:0表示成功,非0表示失败
  • 需要包含头文件stdio.h

示例代码

#include <stdio.h>

int main() {
    char *oldName = "old_filename.txt";
    char *newName1 = "new_filename1.txt";
    char *newName2 = "new_filename2.txt";
    char *newName3 = "new_filename3.txt";

    // 第一次重命名
    if (rename(oldName, newName1) != 0) {
        perror("Error renaming file");
    } else {
        printf("文件重命名为 %s\n", newName1);
    }

    // 第二次重命名
    if (rename(newName1, newName2) != 0) {
        perror("Error renaming file");
    } else {
        printf("文件重命名为 %s\n", newName2);
    }

    // 第三次重命名
    if (rename(newName2, newName3) != 0) {
        perror("Error renaming file");
    } else {
        printf("文件重命名为 %s\n", newName3);
    }

    return 0;
}

使用注意事项

  • 如果多次重命名使用相同的文件名,最终的文件名将取决于最后一次重命名操作
  • 不能跨文件系统重命名(不同分区的文件系统)
  • 重命名目录时,newpath不能是oldpath的子目录

完整文件管理示例

以下是一个包含创建、读取、删除和重命名文件的完整示例:

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

int main() {
    FILE *filePointer;
    char fileName[50];
    char data[100];
    int choice;
    
    printf("Enter the file name: ");
    scanf("%s", fileName);
    
    // 创建文件并写入数据
    filePointer = fopen(fileName, "w");
    if (filePointer == NULL) {
        printf("Unable to create file.\n");
        exit(EXIT_FAILURE);
    }
    
    printf("Enter data to write to the file: ");
    scanf("%s", data);
    fprintf(filePointer, "%s", data);
    fclose(filePointer);
    
    printf("Data successfully written to the file.\n");
    
    // 读取文件内容
    filePointer = fopen(fileName, "r");
    if (filePointer == NULL) {
        printf("Unable to open file.\n");
        exit(EXIT_FAILURE);
    }
    
    fscanf(filePointer, "%s", data);
    printf("Reading data from the file:\nData: %s\n", data);
    fclose(filePointer);
    
    printf("Choose an option:\n1. Delete file\n2. Rename file\n");
    scanf("%d", &choice);
    
    switch (choice) {
        case 1:
            if (remove(fileName) == 0)
                printf("File deleted successfully.\n");
            else
                printf("Unable to delete the file.\n");
            break;
            
        case 2:
            printf("Enter new file name: ");
            char newFileName[50];
            scanf("%s", newFileName);
            if (rename(fileName, newFileName) == 0)
                printf("File renamed successfully.\n");
            else
                printf("Unable to rename the file.\n");
            break;
            
        default:
            printf("Invalid choice.\n");
    }
    
    return 0;
}

跨平台注意事项

  • Windows:路径使用反斜杠\,在字符串中需要转义(如"C:\\Users\\file.txt")或使用正斜杠("C:/Users/file.txt"
  • Linux/macOS:路径使用正斜杠/(如"/home/user/file.txt"

这些函数是C语言标准库的一部分,具有良好的跨平台性,但文件路径的表示方式因操作系统而异。