0

ファイルシステム内のファイルの名前を変更または削除するプログラムに取り組んでいます。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;
}
4

1 に答える 1

1

あなたのコードには多くの問題があります。

char fdelete[25];

これは少なくとも 20 年前には許容範囲に近かったかもしれませんが、最近ではファイル名が 25 文字を超える可能性がかなり高くなります。おそらく使用したいでしょうFILENAME_MAX

fflush(stdin);

fflushこれ (入力用に開かれたファイルを引数として呼び出す) は、未定義の動作を引き起こします。やらないでください。

gets(fdelete);

getsセキュリティ上の問題の深刻な原因です。絶対に使用しないでください。fgets代わりに使用してください。

char frename[25];

と同じ問題fdelete

fflush(stdin);
gets(frename);

上記と同じ問題。

つまり、removeそのファイルへの他のリンクがなく、それに渡す名前が実際のファイルの名前である場合、ファイルを削除する必要があります。

于 2013-06-22T20:55:28.767 に答える