ここから本文です

c言語について

そらまめさん

2019/5/2712:43:32

c言語について

fopenでファイルオープンしたファイル(test1.txt)をtest2.txt
に名前変更するためにrename (test1.txt、test2.txt)を使用すると失敗します。
何が原因でしょうか。

閲覧数:
35
回答数:
4

違反報告

ベストアンサーに選ばれた回答

ikt********さん

2019/5/2900:35:29

fopen してからやってるからです。

オープンなどせず rename だけすれば、たぶん
うまくいきます。

書き出してから rename したいのなら、
fcloseした後にすればいい。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

2019/5/2820:48:25

環境によります。Windows では普通にオープンしているファイルをリネームしたり削除することはできません。
参考 https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fil...

Unix 系(LinuxやWSLも含む、Cygwinも?)ではエラーにならずにリネームしたり、削除できますね。

Windows でしたら、fxh********さんがおっしゃる通り fclose した後でリネームするしかないかと思います。

mer********さん

2019/5/2802:08:14

errnoを調べてください。
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/rename.2.html

具体的には以下のようにします。

if (rename("test1.txt", "test2.txt") < 0) {
perror("rename");
exit(1);
}

fopenしてあっても問題ないはずです。
> オープン済の oldpath に対するファイルディスクリプターにも影響はない。

cygwinでは問題ありませんでした。

プロフィール画像

カテゴリマスター

fxh********さん

2019/5/2713:01:43

エラーメッセージに原因が記載されています。
オープンする前か、クローズ後にリネームしてみましょう。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる