尝试不重写文件并将其保存在 C# 的新位置时出现意外的系统异常
Posted
技术标签:
【中文标题】尝试不重写文件并将其保存在 C# 的新位置时出现意外的系统异常【英文标题】:unexpected system exception while trying not to rewrite a file and saving it in new location in C# 【发布时间】:2013-09-06 07:00:11 【问题描述】:我在应用程序中使用 savefiledialog 来保存文件。如果相同的文件名已经存在,我会弹出一个询问我是否要替换的窗口。如果我给 no 我会收到意外的系统异常。以下是部分代码
string fname1 = "";
saveFileDialog.Title = "Save the Proofer Report";
saveFileDialog.Filter = "Excel Files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.InitialDirectory = "MyDocuments";
saveFileDialog.FileName = "Proofer Report";
aveFileDialog.AddExtension = true;
saveFileDialog.ShowHelp = true;
// saveFileDialog.ShowDialog();
Invoke((Action)(() => saveFileDialog.ShowDialog(); ));
fname1 = saveFileDialog.FileName;
xlWorkBook.SaveAs(fname1, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
//system exception during save as
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
堆栈跟踪
在 Microsoft.Office.Interop.Excel._Workbook.SaveAs(对象文件名, 对象 FileFormat、对象密码、对象 WriteResPassword、对象 ReadOnlyRecommended、对象 CreateBackup、XlSaveAsAccessMode AccessMode, 对象 ConflictResolution, 对象 AddToMru, 对象 TextCodepage,对象 TextVisualLayout,对象本地)在 ProoferXML.MainForm.ProcessDocument(BackgroundWorker 工作者, DoWorkEventArgs e) 在 D:\ProoferXML\WindowsFormsApplication1\WindowsFormsApplication1\MainForm.cs:line 665 在 ProoferXML.MainForm.prooferWorker_DoWork(对象发件人, DoWorkEventArgs e) 在 D:\ProoferXML\WindowsFormsApplication1\WindowsFormsApplication1\MainForm.cs:line 第1457章
使用 workbook.saveAs 保存 excel 时从 HRESULT 获取异常:
【问题讨论】:
我们能看到完整的代码(有保存)吗?什么类型的异常? 请发表您的例外情况 向我们展示您遇到的异常以及您遇到异常的行 我们无法分辨哪一行是第 1,457 行。 xlWorkBook.SaveAs(fname1, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); //另存为时系统异常 【参考方案1】:您很可能必须注意您正在使用的线程模型。建议在调用 Invoke 之前检查 InvokeRequired。 所以你的代码应该是这样的:
if (InvokeRequired)
Invoke((Action)(() => saveFileDialog.ShowDialog(); ));
else
saveFileDialog.ShowDialog();
一些更有用的阅读 Invoke Invoke(Delegate)
【讨论】:
在另存为时出现错误 --- xlWorkBook.SaveAs(fname1, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue , 错误值) 使用 workbook.saveAs 保存 excel 时从 HRESULT 获取异常: 你可以尝试使用 Application.DisplayAlerts = false;在调用 SaveAs 以防止 Excel 生成覆盖警告之前。以上是关于尝试不重写文件并将其保存在 C# 的新位置时出现意外的系统异常的主要内容,如果未能解决你的问题,请参考以下文章
C# 如何从 Outlook 的共享邮箱发送邮件并将其保存在已发送文件夹中