• ベストアンサー

【VC++2005(CLR)】ファイル書き込み時、他でファイルが開かれていると落ちる

いつも大変お世話になっています。 VC初心者です。 現在、ファイル書き込み処理で悩んでいます。 他のユーザがファイルをオープンしてたり、開こうとすると 落ちてしまいます。 たとえば、ファイルが開かれていることを検知して、 ユーザに「ファイルを閉じてください」とメッセージを出した後、 再度書き込み処理を実行できませんでしょうか。 (書き込み中は他のユーザからのアクセスを拒否させたいです。) 現在以下のようなソースを書いています。 //ファイルオープン System::IO::StreamWriter^ sw = gcnewSystem::IO::StreamWriter( path_w,false,System::Text::Encoding::Default); //ファイル書き込み String^ newData = "aaa"; sw->WriteLine(newData); //ファイルクローズ sw->Close(); お手数ですが、よろしくお願いします。

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

  • ベストアンサー
回答No.1

> 落ちてしまいます。 「落ちる」のは適切な例外処理をしていないからでしょう。 今回の場合は,try - catchで例外を捕まえるのがよいかと。 MSDN: StreamWriter コンストラクタ (String, Boolean, Encoding) (System.IO) http://msdn.microsoft.com/ja-jp/library/f5f5x7kt(VS.80).aspx MSDN: Exception Handling under /clr http://msdn.microsoft.com/ja-jp/library/633chdda(VS.80).aspx

yuki7091
質問者

お礼

ご回答ありがとうございます。 try、catchでうまくいきました。 ありがとうございました。

その他の回答 (1)

  • oldman50
  • ベストアンサー率29% (8/27)
回答No.2

例外処理はやることとして、 >たとえば、ファイルが開かれていることを検知して、 >ユーザに「ファイルを閉じてください」とメッセージを出した後、 >再度書き込み処理を実行できませんでしょうか。 >(書き込み中は他のユーザからのアクセスを拒否させたいです。  同じファイルを2人の人が同時に編集してしまい、更新がかちあうことをconfilictといいます。  私は使ったことがありませんが、複数人でのシステム開発プロジェクトにおけるこうしたconflictを避けるために、ファイルをロックする機能を持ったSubversion+プロジェクト管理システムTRACが用いられることがあります。 http://www.atmarkit.co.jp/fjava/rensai4/devtool02/devtool02_1.html

yuki7091
質問者

お礼

ご回答、ありがとうございます。 conflictという言葉を初めて知りました。 こういう情報を教えて頂いて幸いです。