fopen
に電話する理由は不明ですが、あなたはそれから何も読んでいません。あなたがファイルの存在のチェックとしてそれを使用しようとしている場合、必要はありません。remove
からの返信は、削除が成功したかどうかを教えてくれます。
は、たとえば、次のような何かを行うことができ:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#define EXT ".txt"
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
int main (void) {
char buf[PATH_MAX] = "";
size_t len = 0;
printf ("enter filename to delete (without .txt); ");
if (!fgets (buf, sizeof buf, stdin) || *buf == '\n') {
fprintf (stderr, "error: EOF or invalid input.\n");
return 1;
}
len = strlen (buf); /* get length */
if (buf[len - 1] == '\n') /* check trailing '\n' */
buf[--len] = 0; /* overwrite with '\0' */
else {
/* handle error, input exceeded buf size */
return 1;
}
strcat (buf, EXT);
errno = 0;
if (remove (buf) == -1)
perror ("remove failed");
else
printf ("file: '%s' successfully removed.\n", buf);
return 0;
}
使用例/出力それはLinuxまたはDOS上で同じ働き
$ ls -al foobar.txt
-rw-r--r-- 1 david david 0 Sep 17 06:35 foobar.txt
$ ./bin/rmfile
enter filename to delete (without .txt); foobar
file: 'foobar.txt' successfully removed.
$ ./bin/rmfile
enter filename to delete (without .txt); foobar
remove failed: No such file or directory
(あなただけPATH_MAX
を定義する必要があります窓に)。
使用例/出力のWindows上
c:\Users\david\Documents\dev\src-c\tmp>cl /Wall /Ox /Febin\rmfile rmfile.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
rmfile.c
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:bin\rmfile.exe
rmfile.obj
c:\Users\david\Documents\dev\src-c\tmp>echo "test on Windoze" > foobar.txt
c:\Users\david\Documents\dev\src-c\tmp>dir foobar.txt
Volume in drive C has no label.
Volume Serial Number is 2045-D579
Directory of c:\Users\david\Documents\dev\src-c\tmp
09/17/2017 06:56 AM 20 foobar.txt
1 File(s) 20 bytes
0 Dir(s) 20,235,399,168 bytes free
c:\Users\david\Documents\dev\src-c\tmp>bin\rmfile
enter filename to delete (without .txt); foobar
file: 'foobar.txt' successfully removed.
c:\Users\david\Documents\dev\src-c\tmp>bin\rmfile
enter filename to delete (without .txt); foobar
remove failed: No such file or directory
私はあなたが窓の上にある場合、あなたはおそらく、コンパイラからstrcat
警告を削除するには、ファイルの先頭に次のように定義する必要がありますね。
#if defined (_WIN32) || defined (_WIN64)
#define _CRT_SECURE_NO_WARNINGS
#endif
strcat use strcat(str、 "。txt");追加します。 –
決して、決して、 'gets'を使用しないでください。それは安全ではなく、その事実のためにC11ライブラリから削除されました。 'fgets'を使い、最後から' '\ n' 'をトリミングしてください。あなたの教授があなたが 'gets 'を使いたいと思ったら、クラスを今すぐ落として別の教授を探しに行ってください... –
チェックされていない' fopen'と 'fclose'のペアの意味を見つけることは困難です。 – WhozCraig