0

バイトライターを作ろうとしています。これまでのところ、ライターのコーディングを続行する前の一般的なテストとして、プログラムにファイル ヘッダーを書き込ませました。問題は、 でファイルを選択した後、coreFormcoreSaveFileDialog

var fs = new FileStream(classCoreForm.CoreSaveFileDialog.FileName, FileMode.Open, FileAccess.ReadWrite);

ダイアログから FileName が表示されず、「空のパス名は無効です」という例外がスローされます。

私のメソッドのソースは次のとおりです。

internal void writeHeader()
    {
        var classCoreForm = new coreForm(); //Creates reference instance for coreForm=
        var fs = new FileStream(classCoreForm.coreSaveFileDialog.FileName, FileMode.Open, FileAccess.ReadWrite);
        /*
         * Writes file header via fs.WriteByte . . .
         */
    }

writeHeaderと呼ばれる予備関数から呼び出されていsaveScriptます。これがそのソースです。

internal void saveScript()
    {
        var classCoreForm = new coreForm(); //Creates reference instance for coreForm
        if (fileAlreadySaved == false)
        {
            classCoreForm.coreSaveFileDialog.ShowDialog(); //Shows save file dialog
            if (classCoreForm.coreSaveFileDialog.FileName != "")
            {
                writeHeader();
            }
            else
            {

            }
        }
    }

私は何を間違っていますか?SaveFileDialog のプロパティで何かを誤って設定しましたか、それとも上記のコード内に何かありますか?

4

1 に答える 1

1

saveScript() は writeHeader を呼び出しますが、writeHeader には何も渡しません。次に、saveScript メソッドで作成したインスタンスとは別の「coreForm」の完全に新しいインスタンスを作成します。

ファイル名を引数として受け入れるように writeHeader を変更します。

internal void writeHeader(string fileName)
{
    //var classCoreForm = new coreForm(); //Creates reference instance for coreForm=
    var fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite);
    /*
     * Writes file header via fs.WriteByte . . .
     */
}

次に、saveScript() メソッドで、writeHeader(); を変更します。に

writeHeader(classCoreForm.coreSaveFileDialog.FileName);

saveScript で他の理由で coreForm が必要な場合は、coreForm を参照渡しするか、必要な他の変数を saveScript に渡します。

于 2013-06-18T03:49:24.963 に答える