none
C#2005でCSVファイル出力しようとしてるんですが・・・ RRS feed

  • 質問

  • StreamWriterでMy Documents内にCSVファイルを出力しようとしています。

     

    出力するCSVファイルが既にエクセルで開かれている場合プログラムがabortします。

    出力するファイルが開かれているかどうか判定する方法ってあるんでしょうか?

    (新規作成、開かれていない場合の上書きは正常終了します。)

    2007年5月17日 11:56

すべての返信

  • かさこさん、こんにちは。

     かさこ さんからの引用
    出力するCSVファイルが既にエクセルで開かれている場合プログラムがabortします。
    出力するファイルが開かれているかどうか判定する方法ってあるんでしょうか?

    例外処理くらいしか根本的に解決できる方法はありません。
    Excel だけであれば、MainWindowTitle からある程度推測は可能ですが。

    行き詰った時は、「なぜこのようなことで悩む必要があるのか?」 を考えてみましょう。
    そもそも '既に存在しているファイルに出力する' というのがまずいのではないでしょうか?

    親切なシステムなら、すでに存在しているならばリネームしてくれるものです。
    2007年5月17日 12:03
  • システム開発に携わる者として、厳しいお言葉ありがとうございます
    2007年5月18日 8:28
  • かさこさん、こんにちは。

     かさこ さんからの引用
    システム開発に携わる者として、厳しいお言葉ありがとうございます

    あまり厳しいことを書いたつもりではないのですが、厳しい表現があったのであれば謝罪致します。

    ところで、どういった方向で進めたいのでしょうか?
    2007年5月18日 12:09
  • こんにちは。

     

    ちょっと気になったのですが、

     

    もし、1つのCSVファイルを、

    作成したC#のプログラムで、編集

       ↓

    エクセルで編集

       ↓

    作成したC#のプログラムで、編集

       ↓

    以下略

     

    のような感じで一貫性を持って更新していくのであれば

     

    Excelで編集中の時は

    UnauthorizedAccessException

    をcatchして

    ユーザに

    「ほかのアプリケーションでファイルを開いているならば閉じてください」

    というような警告を出し、

     

    作成したC#のプログラムで編集中のときは同時にExcelで

    開いて保存したりできないように、という部分も考慮した方がよいと思います。

     

    また、ファイルの出力の部分はエラー処理も含めて

    別クラスに追い出して、そちらに任せれば、構成がすっきりすると思います。

     

     

    2007年5月26日 4:43
  • 運用カバー的な発想ですが、まあありかもしれませんね。
    どれが良いかは End User 次第でしょう。
    2007年5月26日 13:26