ファイルのリネームができません
[上に]
[前に]
[次に]
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の設定と何か関係あるのかもしれませんね
そうなんですか。その線で調べて見たいと思います。
みなさんありがとうございます。
と言いながら、他の意見がありましたらよろしくおねがいします
[上に]
[前に]
[次に]