WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlでファイルのcopy

わごな [WriteDate : Fri Dec 8 01:30:26 2000]

下のようなスクリプトを組んだのですが
新しく作ったファイルが壊れます


$filename_org = "●●"
$filename_new = "■■"

open(OUT,"> $filename_new") || &error;
binmode(OUT);
#binmode(STDOUT);
print OUT $filename_org ;
close(OUT);

・前後とerrorサブルーチン省略


●●や■■は実際にはgifやjpgで
printした■■は画像編集ソフトでは編集できないエラーファイルに
なってしまいます(ファイルサイズも変わってしまいます)
考えられる間違いはなんでしょうか?

バギンズ [WriteDate : Fri Dec 8 02:06:03 2000]

>print OUT $filename_org ; 
これって、元ファイルの内容ではなく、ファイル名を書き出しているとしか思えないのですが...

ふじ [URL] [WriteDate : Fri Dec 8 03:14:27 2000]

Perl5 以降なら、File::Copy モジュールを使うのが簡単。

use File::Copy;
copy($filename_org, $filename_new);

敢えて自力で書くなら、

$filename_org = "●●"
$filename_new = "■■"

open(IN, "< $filename_org") || &error;
open(OUT,"> $filename_new") || &error;
binmode(OUT);
binmode(IN);
read(IN, $buf, -s $filename_org);
print OUT $buf;
close(OUT); 
close(IN);

こんな感じでしょうか。
ファイルが巨大(数十MBとか)の場合は、一度に $buf に読み込まないで
適宜バッファリングした方がいいかも。
# File::Copy モジュールは、バッファリングも面倒見てくれます。

わごな [MAIL] [URL] [WriteDate : Fri Dec 8 23:37:05 2000]

パキンズさん、ふじさん回答ありがとうございます
って、ゆ〜かすいませんでした

ちょっと勘違いしていまして
$filename_orgにはファイル名ではなく
ファイルの内容を読みこんでいました
ファイルの中身が壊れていたのはファイル名と思ったまま
中身をいじった結果でした(あー情けない)
回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]