0

我正在尝试制作一个字节写入器。到目前为止,在继续编写编写器之前,我已经让程序编写文件头作为一般测试。coreForm问题是,在我通过's选择文件后coreSaveFileDialog,该行

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 传递任何内容。然后,您将创建一个全新的“coreForm”实例,该实例与您在 saveScript 方法中创建的实例不同。

更改 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 回答