rename()
rename() はファイル名を変更する。
int rename(char *旧ファイル名, char *新ファイル名);
成功すると 0 を返し、エラーが発生すると 0 以外の値を返す。
#include
#include
int main(int argc, char *argv[])
{
if (rename(argv[1], argv[2])) {
printf("Error.\n");
exit(1);
} else {
printf("Renamed successfully.\n");
}
return 0;
}
takatoh@nightschool $ ls *.txt
myfile.txt
takatoh@nightschool $ ./sample_9_7a myfile.txt yourfile.txt
Renamed successfully.
takatoh@nightschool $ ls *.txt
yourfile.txt
remove()
remove() はファイルを削除する。
int remove(char *ファイル名);
成功すると 0 を返し、エラーが発生すると 0 以外の値を返す。
#include
#include
int main(int argc, char *argv[])
{
if (rename(argv[1], argv[2])) {
printf("Error.\n");
exit(1);
} else {
printf("Renamed successfully.\n");
}
return 0;
}
takatoh@nightschool $ ls *.txt
yourfile.txt
takatoh@nightschool $ ./sample_9_7b yourfile.txt
Remove successfully.
takatoh@nightschool $ ls *.txt
ls: *.txt にアクセスできません: そのようなファイルやディレクトリはありません
rewind()
rewind() はストリームの現在位置を先頭に巻き戻す。
void rewind(FILE *ストリーム);
rewind() に戻り値はない。開くことが出来たファイルはすべて巻き戻すこともできるから。
次のプログラムは、ファイルの内容を表示したあと、先頭まで巻き戻してもう一度表示する。
#include
#include
int main(int argc, char *argv[])
{
FILE *fp;
if (argc != 2) {
printf("Filename not given.\n");
exit(1);
}
if ((fp = fopen(argv[1], "r")) == NULL) {
printf("Cannot open file: %s\n", argv[1]);
exit(1);
}
/* display file contents */
while (!feof(fp)) {
putchar(getc(fp));
}
/* rewind */
rewind(fp);
/* display once more */
while (!feof(fp)) {
putchar(getc(fp));
}
fclose(fp);
return 0;
}
takatoh@nightschool $ ./sample_9_7c myfile
Hello
I'm takatoh
How are you?
�Hello
I'm takatoh
How are you?
�takatoh@nightschool $
なんかファイルの最後に変な文字が出力されてるな。何だろ?
[追記]
上の「変な文字」にいついてコメントで教えてもらった。詳しくはコメントを見て欲しいけど、要するに getc() が返した EOF を出力している、てことみたいだ。
次のように getc() の戻り値をチェックするように変更したらでなくなった。
#include
#include
int main(int argc, char *argv[])
{
FILE *fp;
char ch;
if (argc != 2) {
printf("Filename not given.\n");
exit(1);
}
if ((fp = fopen(argv[1], "r")) == NULL) {
printf("Cannot open file: %s\n", argv[1]);
exit(1);
}
/* display file contents */
while (!feof(fp)) {
ch = getc(fp);
if (ch == EOF) {
break;
}
putchar(ch);
}
/* rewind */
rewind(fp);
/* display once more */
while (!feof(fp)) {
ch = getc(fp);
if (ch == EOF) {
break;
}
putchar(ch);
}
fclose(fp);
return 0;
}
takatoh@nightschool $ ./sample_9_7d myfile
Hello
I'm takatoh
How are you?
Hello
I'm takatoh
How are you?