ファイルのリネームができません

[上に] [前に] [次に]
CGI超初心者 [E-Mail] 1999/09/29(水) 15:03:05
Prelでファイル名の変更をしたいのですが、うまくいきません。

rename($tempfile,$datafile);

としても$datafileが変更されないのです。
サーバはNTを使っていて、管理者に実行権限を聞いてみたのですが
私が使用しているフォルダには全権限を与えているそうです。
どうしてもわからないので、よろしくお願いします。

wosamu 1999/09/29(水) 15:28:42
引数逆じゃないでしょうか。

CGI超初心者 1999/09/29(水) 15:46:34
レスありがとうございます。
引数は
rename(古いファイル名,新しいファイル名);
でいいはずです。
一応、逆にしてやってみましたがダメでした。
引き続き、みなさんのアドバイスお待ちしてます。

あほ 1999/09/29(水) 16:02:21
自分もNT+Apacheでperlやってますが、
同じくrenameが利かない時が時々あります。
NTを再起動とかするとrename出来るようになったりしますが、
なぜ、そうなるのかが分かりません。アドバイスお願いします。

ばかぼん 1999/09/29(水) 16:03:51
$tempfileと$datafileには、実際にどのようなパス(ファイル名)が
入って来るのでしょうか?
例えば、$datafileが空っぽだったり、$datafileに存在しない
ディレクトリが含まれていたり、はたまた、$datafileのファイルが
既に存在していて、それがディレクトリだったり。
ひょっとして、$tempfileのファイルがなかったりして。

CGI超初心者 1999/09/29(水) 16:15:57
ファイルはこのようになってます。

$datafile = "visitor.txt";
$tempfile = "temp";

全部同じディレクトリ内なのでパスの指定間違いも無いはずです。
tempファイルも存在してるんですよね・・・。

ふじ 1999/09/29(水) 16:22:27
まずは、

rename($tempfile,$datafile) or die "rename false. $!";

みたいにして、失敗した時のエラーメッセージを読みましょう。
何か手掛かりが得られるかも。

#青ラクダ本 p.630に「システムコールの戻り値は必ずチェックせよ」
#って、3回も繰り返して書いてあります。

ふじ 1999/09/29(水) 16:23:45
あ、CGIで動かしているんなら die ではなくて

print "Content-Type: text/plain\n\n";
rename($tempfile,$datafile) or print "rename false. $!";

てな感じで。

ばかぼん 1999/09/29(水) 16:38:05
>全部同じディレクトリ内なのでパスの指定間違いも無いはずです。
CGIも同じディレクトリで動くんですか?

CGI超初心者 1999/09/29(水) 16:46:24
>CGIも同じディレクトリで動くんですか?
ややこしい書きかたしてごめんなさい。
実行ファイルと同じディレクトリにあると言う意味でした。

それと、ふじさんのおっしゃる通りにやってみたのですが

rename false. File exists

というメッセージがでました。これってどういうことでしょう?

あのんきい 1999/09/29(水) 17:17:14
>rename false. File exists
(rename失敗)ファイルが存在しています

変更しようとしたファイルがすでに存在するので
エラーが出るのではないでしょうか?

perlのrenameは、変更しようとしたファイルが存在していても
無視するので、NTの設定と何か関係あるのかもしれませんね
(ファイルの内容を変更できないようになっている等…)

CGI超初心者 1999/09/29(水) 17:27:57
>perlのrenameは、変更しようとしたファイルが存在していても
>無視するので、NTの設定と何か関係あるのかもしれませんね

そうなんですか。その線で調べて見たいと思います。
みなさんありがとうございます。
と言いながら、他の意見がありましたらよろしくおねがいします

[上に] [前に] [次に]