none
datafile1が存在しない時、datafile1を作成するには。 RRS feed

  • 質問

  • Code Snippet

     

            private void Form1_Load(object sender, EventArgs e)
            {
                using (FileStream fs = new FileStream("datafile1", FileMode.Open, FileAccess.Read))
                {

                    BinaryFormatter formatter = new BinaryFormatter();
                    data2 = (mydata)formatter.Deserialize(fs);
                }


            }

     

    上記のようにすると、"datafile1"が存在しない時、エラーが発生します。

              

    Code Snippet

      data1 = new mydata();
                data2 = new mydata();
                data1.productkey = 3456789;
                data1.field[1, 1] = 7;
                data1.field[999, 999] = 12;
                using (FileStream fs = new FileStream("datafile1", FileMode.Create, FileAccess.Write))
                {

                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(fs, data1);

     

    "datafile1"が存在しない時,上記のようにして"datafile1"を作成したいのですが、エラーの処理はどのようにコーディングすればよいのでしょうか?

    多分基本的なことだろうと思いますが、すみませんがよろしくお願いします。

    2008年8月27日 9:18

回答

  • 例外あるいはFile.Exist(path) によってファイルの存在を確認するという方法は、条件判断をした後~ファイルが存在しない時の処理 をする間に、ほかのプロセスでファイルが作成されてしまう可能性がある場合には、問題を起こします。

    (つまり、同時起動をゆるさないようなアプリケーションでなければならない)

    • Mutex などを使って、この部分をクリティカルセッションとして扱う

    • 新しいファイルを作成するとき、datafile1 ではない名前で作成し、初期化が終わったら datafile1 という名前にリネームする

    などが考えられます。

    2008年8月28日 1:40

すべての返信

  • こんにちは

     

    人によっていろいろある気がするのですが,こんな感じで書くのかなと思います。

     

    Code Snippet

            Try

                   正常系(ファイルを読み込んでデータを読み取る)
            Catch ex As FileNotFoundException

                   代替フロー(ファイルが無い場合:データを作成してファイルに保存)
            Finally

            End Try

     

     


    2008年8月27日 11:35
  • こんにちは。

     

    System.IO.FileクラスのExistsメソッドで存在確認をしてから処理をするのがよいと思います。

    Code Snippet

     

            private void Button1_Click(object sender, EventArgs e)
            {

                if System.IO.File.Exists("datafile1") {

                    //ファイルが存在するときの処理

                } else {

                    //ファイルが存在しない時の処理

                }

            }

    2008年8月27日 23:55
  • 個人的には、

     

    Code Snippet

    private void Button1_Click(object sender, EventArgs e)
    {

        if ( !System.IO.File.Exists("datafile1") )

        {

            // ファイルを作成する処理...

        }//if

        // -----

        // そのあとの処理...

    }//Button1_Click

     

     

    のほうが、シンプルだと思います。

    2008年8月28日 0:17
  • 例外あるいはFile.Exist(path) によってファイルの存在を確認するという方法は、条件判断をした後~ファイルが存在しない時の処理 をする間に、ほかのプロセスでファイルが作成されてしまう可能性がある場合には、問題を起こします。

    (つまり、同時起動をゆるさないようなアプリケーションでなければならない)

    • Mutex などを使って、この部分をクリティカルセッションとして扱う

    • 新しいファイルを作成するとき、datafile1 ではない名前で作成し、初期化が終わったら datafile1 という名前にリネームする

    などが考えられます。

    2008年8月28日 1:40
  • たくさんのレスをいただき本当に有難うございました。おかげで解決することができました。

    2008年8月28日 4:56