• 締切済み

同じ名前のファイルを作った場合に上書きしてしまうのですが、どうすれば上書きしないで保存できるのでしょうか?

ランダム関数で数字を表示し、それをファイルに保存し、そのファイルの名を好きな文字で決めるというプログラムを作ったのですが、 一回目にランダム関数で数字を保存して、Aという名前のファイルに入れた後、二回目に同じ作業をして同じファイル名にしたら上書きされて、一回目とは違うランダムな数字が表示されてしまいました。 もうこの名前のファイルは存在します、という意味の部分を入れなければならないと思うのですが、どういった肯定を取り入れればファイルが存在していることがわかるのでしょうか?

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス >同じ名前のファイルを作った場合に上書きしてしまうのですが、どうすれば上書きしないで保存できるのでしょうか? ・書き込むファイルの有無を調査することで防げます。  単純な方法では、fopen を使って読み込みでオープンできなければ、ファイルが存在している  可能性が高いです。でも、もっと安全にするには、ファイルを検索する関数などを使って検索  出来なければ(見つからなければ)存在しないと判定します。 ・C関数の標準では便利な関数がなかなかありませんので、Win32 API などを使うとファイルの  有無をチェックできます。→Windows OS の場合はね。 ・PathFileExists() API 関数で有無をチェックできます。  使い方は    if ( PathFileExists(filename) ){   /* ファイルは既に存在します */  }  else{   /* ファイルが無いため、新規作成します */  }  こんな感じで使います。 ・なお、使うには #include <shlwapi.h> をインクルードして shlwapi.lib をインポートライブラリ  として追加する必要があります。分かりますか?意味。 ・OS やコンパイラの環境が全く分からないため、これ以上のアドバイスは出来ません。 ・以上。参考に!

参考URL:
http://nienie.com/~masapico/api_PathFileExists.html
  • DT200
  • ベストアンサー率38% (63/164)
回答No.3

環境が不明ですが... #include <unistd.h> int ret; /* ファイルが存在するか調べる */ ret = access( "A", F_OK ); if( ret == 0 ){ /* * ファイルが存在するときの処理 */ } else{ /* * ファイルは存在しない。新規のファイルを作成する。 */ }

noname#30727
noname#30727
回答No.2

ANo.1です。ファイルがロックされている場合はNULLを返す事があるので、その場合にはファイルが存在しない事にはならないですね。 正確に取得するには、OSと処理系を特定しないと難しそうです。

noname#30727
noname#30727
回答No.1

fopen("A", "r") がNULL以外を返したら"A"は存在します。 すぐにfcloseしてください。

関連するQ&A

専門家に質問してみよう