• ベストアンサー

Perlでファイル名を変更したいのですが

x.datとy.datが存在していた場合 y.datを削除して x.datをy.datに改名する命令はあるでしょうか? y.datが存在していないときには rename 'x.dat' 'y.dat'; があっていいのですがy.datがあるかもしれないときに使えないので困っています やはりunlinkと共に使うしかないのでしょうか?

  • guuman
  • お礼率86% (1043/1206)
  • Perl
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
noname#43437
noname#43437
回答No.3

No.1です perlのドキュメントを確認してみました。 「Changes the name of a file; an existing file NEWNAME will be clobbered.」 ファイルの名前を変えます。すでに存在するNEWNAMEファイルは、上書きされます。 ・・と、書いてありました。 けれど、その下の方には・・ OSに依存するかも、というようなことがいろいろ書いてあるので・・微妙ですね。安全に、先にunlinkするか・・ターゲットシステム上で動けばとりあえずよしとするか・・Perlのドキュメント通りに動かないOSは無視するか・・。

guuman
質問者

お礼

わざわざ仕様まで調べていただきありがとうございます 参考にします

その他の回答 (2)

回答No.2

名前変更で上書きってlinuxだけなんですねー。 使った事がないから、あとで試してみようかなー。 回答が出ているようなので、適当な事を書いちゃい ます。^^ unlinkがいやなら、適当な名前にかえちゃうのは どうですか?  if( -e y.dat ){ $time = time(); rename y.dat , $time.dat; rename x.dat , y.dat; }  else{ rename x.dat , y.dat; } 書いては見たものの、けっこう怪しいかも。 それに、同じ秒で同一の処理があったら、不具合に なるだろうし、ファイルが巨大だったり、頻繁にこの 処理が起きたら、ファイルでいっぱいになってしまふ。 $time.dat がさらにあるかどうか、もしあったら、 数秒sleepさせるとして、、、。 スクリプトはあってないかも。 考え方だけ参考にしてみては~♪

guuman
質問者

お礼

ありがとうございます 不精なので1行でできないかと思ってみたのです

noname#43437
noname#43437
回答No.1

UNIX系OSなら、renameだけでできますが? もしほかのOSで、renameだけでできないようなら、unlinkを使えばいいだけだと思いますが・・それほど悩む理由があるのでしょうか?

guuman
質問者

お礼

ありがとうございます FedoraCore3です 一応Unix系ですからrenameだけで大丈夫だったのですね unlinkしないといけないと思い込んでいました

関連するQ&A

  • 「unlink」「rename」以外で同じ処理を

    ・「unlink」以外でファイル削除 ・「rename」以外でファイルリネーム したいのですが、何か方法はあるでしょうか? ※セーフモード環境で、「ファイル削除」「ファイルリネーム」したいです

    • ベストアンサー
    • PHP
  • unlinkしたファイルを元に戻す方法?

    UNIX系OSでは(Windowsとかでもできるのでしょうか?) プログラム中で使う一時ファイルを、 プログラムが途中で異常終了したりした場合でも 確実に消えてなくなるように、 int fd = open( "temp.dat", O_RDWR|O_CREAT ) ; unlink( "temp.dat" ) ; というように、一時ファイルを作った直後にunlink、という手段が よく使われますが・・・ この、unlinkしてしまって、ファイルディスクリプタだけになったファイルを、 別のファイルに自力で書き写す以外に、 再びファイルとして残すことってできないのでしょうか? 要するに・・・ プログラムが途中で異常終了したりしたときは、 確実に消えてほしいけれど、 必要な場合は残したい、でも、残す処理が途中で中断したりして、 半端なファイルが残ってほしくない、 ・・・というような要件なのですが。。

  • 重複ファイル名ある場合ファイル名の末尾に1をつける。

    ファイルアップロードのcgiで、上記題名の通り重複するファイル名を上書きするのではなく、重複するファイル名の末尾に番号をつけ上書きされないようにしたいのですが、どのように変更すれば良いのでしょうか教えてください。 # ファイル受信時の処理 sub file_receive { $form_log .= "ファイルアップロードを処理しています。<br>"; if ($upload) { # 同名のファイルがある場合、削除権限があれば上書き if (-e $formdata{'savefile'}) { $formdata{'savefile'} = ($formdata{'savefile'}); $form_log .= "同じファイルが存在します"; if ($delete) { if (unlink $formdata{'savefile'}) { $formdata{'file'} = ($formdata{'file'}); $form_log .= " 既存の".$formdata{'file'}."を削除しました。<br>"; } else { $formdata{'file'} = ($formdata{'file'}); $form_log .= " 既存の".$formdata{'file'}."を削除できませんでした。<br>"; } } else { $form_log .= " 上書きには、削除権限が必要です。<br>"; } } # 保存(リネーム)処理 if (not -e $formdata{'savefile'}) { if (rename $formdata{'tempfile'}, $formdata{'savefile'}) { chmod $permission, $formdata{'savefile'} if ($permission); $formdata{'file'} = ($formdata{'file'}); $form_log .=" ".$formdata{'file'}."を保存しました。<br>"; } } }

    • ベストアンサー
    • Perl
  • このファイルどうしたらいいの

    Publicフォルダの中にNTUSER.DAT NTUSER.DAT.LOG1 NTUSER.DAT.LOGの3つのファイルが存在します。どういう意味のあるファイルですか?削除してもいいんですか?教えてください。

  • ファイルの削除について

    あるフォルダ内の ファイルを削除するのに (1)unlinkを使用する (2)1つのファイルであれば unlink<abc.txt>でいい (3)テキストファイルを全部消すのであれば unlink<*.txt>でいい というところまでは わかっています ですが たとえば フォルダ内に abc1011.txt abc1012.txt abd1011.txt abd1012.txt abe1011.txt abe1012.txt abf1011.txt abf1012.txt のような ファイルがあり 1012を含むものだけ削除したい という場合はどのようにすればいいのでしょうか

    • ベストアンサー
    • Perl
  • 離婚後、子供の名の変更方法についてお尋ねします。

    離婚後、子供の名の変更方法についてお尋ねします。 旧姓に戻す手続きは家庭裁判所に申し出ると可能と聞いています。 しかし、申請どおり許可されても姓名が漢字2文字になります。 そこで、名をひらがな読みにして全体を4文字にたいのですがどのような申請をするとよいのかご存知の方教えてください。 即ち、 (旧)姓   名  --> (改名)姓  名 -->(名をひらがな読みに)姓  名    XX  X         Y  X              Y  YYY

  • C言語のファイル入出力の問題です

    C言語の課題です ファイルの入出力を応用した関数の総和と平均値を求める問題です。 総和がどうしても0になります 原因を教えて下さい 前問にy=x/(1+x^2)を-10.0≦x≦10.0(xは0.01刻み)の範囲で計算して結果をsp4_rslt.datに出力せよという問題があります。これはそのsp4_rslt.datを最初に読み込んで、今度は0≦x≦10.0の範囲でyの総和と平均を求めなければなりません。 なのでfor文でループしてあとは計算というプログラムにしました。最後に結果をsp6_rslt.datに出力しろというものです。 けれどいくらやっても0にしかなりません。どこを修正すればいいのか教えて下さい #include <stdio.h> #include <stdlib.h> int main(void) { double x,y; double Summation, Average; FILE *fp; fp = fopen("sp4_rslt.dat", "r"); if (fp == NULL) { puts("can't open file!"); exit(-1); } for(x=0.; x<=10.0; x+=0.01){ y = x/(1+x×x); fscanf(fp,"%lf %lf",&x,&y); Summation = Summation + y ; Average = Summation / 1000.0; } fp = fopen("sp6_rslt.dat","w"); fprintf(fp,"Summation is %lf\nAverage is %lf\n",Summation ,Average); fclose(fp); return 0; }

  • 平方数の証明

    (x^2+y^2)と(x^2-y^2)の二式が共に平方数になるための自然数x,yが存在しないことを証明してください。

  • コマンドプロントでファイルの削除方法

    コマンドプロント初心者です。 やりたいことは、バッチ処理にて、指定したフォルダ内の「*.dat」ファイルを削除することです。 ネットで調べてみたんですが、削除されません。 また、削除してよいかの確認メッセージも表示されません。 何が悪いのかご教授お願いします。 以下が作成したバッチファイルの中身です。 -- ********************************** -- Outlook 2010 添付ファイルのキャッシュを削除する -- ********************************** C:\Temp>del *.dat C:\Temp\*.dat、よろしいですか (Y/N)?

  • スパイウェア ファイル名

    環境:WindowsXP SP1, Norton anti virus2003 temp532という白と青色のアイコンがデスクトップに表示される。それと共に「this call is not free...」というミニウインドウが表示される。削除しても次起動した時にはまた存在する。下記サイトを見て手順に従いましたが改善されません。http://www.higaitaisaku.com/korobanu.html トレンドマイクロのオンラインスキャンを実行したら9件のファイルが見つかったのですが、エクスプローラから検索してもそれらのファイルが存在しないため、削除もできません。その他ポップアップがしょっちゅう出るので、易しい手順のあるサイト等を教えていただけますでしょうか。

専門家に質問してみよう