【问题标题】:SaveFileDialog() Attempted to read or write protected memorySaveFileDialog() 试图读取或写入受保护的内存
【发布时间】:2020-07-14 22:13:10
【问题描述】:

我正在尝试使用 SaveFileDialog(),但在 saveFile.ShowDialog(); 上出现异常:

System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'

这是我的代码:

private void saveFile(ACCObject acc) {

            IFormatter formatter = new BinaryFormatter();

            SaveFileDialog saveFile = new SaveFileDialog();

            // set a default file name
            saveFile.InitialDirectory = Environment.ExpandEnvironmentVariables(@"C:\Users\%USERNAME%\Desktop\");
            saveFile.Title = "Save File";
            saveFile.FileName = "unknown.txt";
            saveFile.DefaultExt = "txt";
            saveFile.FilterIndex = 1;

            // set filters - this can be done in properties as well
            saveFile.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";


            DialogResult result = saveFile.ShowDialog();

            if (result == DialogResult.OK) {

                Stream stream = new FileStream(saveFile.FileName, FileMode.Create, FileAccess.Write);

                formatter.Serialize(stream, acc);
                stream.Close();
            }
        }

我在使用 FolderBrowserDialog() 或 OpenFileDialog() 时没有任何问题。

有谁知道可能出了什么问题?我只是想让用户保存对象以便以后反序列化它。

我在 Windows 10 上使用 Visual Studio 2019 Professional。

这是堆栈跟踪:

StackTrace  "   at System.Windows.Forms.FileDialogNative.IFileDialog.Show(IntPtr parent)\r\n   at System.Windows.Forms.FileDialog.RunDialogVista(IntPtr hWndOwner)\r\n   at System.Windows.Forms.FileDialog.RunDialog(IntPtr hWndOwner)\r\n   at System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner)\r\n   at System.Windows.Forms.CommonDialog.ShowDialog()\r\n   at com.aerocc.aerocc.saveFile(ACCObject acc) in C:\\Users\\user\\Source\\Repos\\user\\com-engineering-app\\Calculations\\aerocc\\aerocc.cs:line 613\r\n   at com.aerocc.aerocc.calculate() in C:\\Users\\user\\Source\\Repos\\user\\com-engineering-app\\Calculations\\aerocc\\aerocc.cs:line 425\r\n   at com.aerocc.aerocc.Preview_Click(Object sender, EventArgs e) in C:\\Users\\user\\Source\\Repos\\user\\com-engineering-app\\Calculations\\aerocc\\aerocc.cs:line 341\r\n   at System.Windows.Forms.Control.OnClick(EventArgs e)\r\n   at System.Windows.Forms.Button.OnClick(EventArgs e)\r\n   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)\r\n   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)\r\n   at System.Windows.Forms.Control.WndProc(Message& m)\r\n   at System.Windows.Forms.ButtonBase.WndProc(Message& m)\r\n   at System.Windows.Forms.Button.WndProc(Message& m)\r\n   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)\r\n   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)\r\n   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)\r\n   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)\r\n   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)\r\n   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)\r\n   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)\r\n   at System.Windows.Forms.Application.Run(Form mainForm)\r\n   at com.Program.Main() in C:\\Users\\user\\Source\\Repos\\user\\com-engineering-app\\Program.cs:line 13"    string

【问题讨论】:

    标签: c# winforms exception memory savefiledialog


    【解决方案1】:

    查看以下链接以检查如何序列化文件。另外,不清楚ACCObject 它有什么。

    https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.formatters.binary.binaryformatter?view=netframework-4.8

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-08
      • 2012-09-21
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多