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?