c - windows下C盘文件删除和重命名的方法

标签 c file-io

我正在开发重命名或删除文件系统中的文件的程序。我使用的是 C,它在 Linux 机器上运行良好,但在 Windows 上失败。我使用 gcc 编译器套件。以下是它不会从我的文件系统中删除文件的代码。

提前致谢

 #include<stdio.h>

int main()
{
 printf("Program demonstrating file renaming and file deletion. \n");

 printf("Enter file name to be deleted : ");
 char fdelete[25];

 fflush(stdin);

 gets(fdelete);

 printf("Enter file name to be renamed : ");
 char frename[25];

 fflush(stdin);

 gets(frename);

 if (remove(fdelete)!=0)
 { 
  printf("error deleting the file.\n");
 }

 if(rename("test2.txt",frename)!=0)   //test2.txt is the original file
 {
  printf("eeror renaming the file.\n");
 }

return 0;
}

最佳答案

你的代码有很多问题。

char fdelete[25];

这在 20 年前至少是可以接受的,但现在文件名长度超过 25 个字符的可能性相当高。您可能想使用FILENAME_MAX

fflush(stdin);

这(使用打开输入的文件作为参数调用 fflush)会产生未定义的行为。只是不要这样做。

gets(fdelete);

gets 是安全问题的严重来源。切勿使用它。请改用 fgets

char frename[25];

fdelete相同的问题。

fflush(stdin);
gets(frename);

与上面相同的问题。

总而言之,remove 应该删除一个文件,前提是没有其他链接指向该文件,并且您传递给它的名称是实际文件的名称。

关于c - windows下C盘文件删除和重命名的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255157/

相关文章:

c - main的地址是什么?

c - 在多线程程序中访问文件指针时出错

c++ - 为什么在Excel VBA中调用exe不输出文件?

c - 从 C 中的文件中读取 int 或 float

c - gcc 金丝雀 : undefined reference to __stack_chk_guard

c - OpenSSL C API : Certificate chain validation with CRL

c - 使用 Execl 执行我的程序

c++ - 有没有办法读取 C++ 中的文件文件夹?

c - 使用 fgets 将行复制到字符串数组中?

c - SCTP 多宿主未按预期工作