【问题标题】:SaveFileDialog locking save file location c# winformsSaveFileDialog 锁定保存文件位置 c# winforms
【发布时间】:2016-10-06 15:56:50
【问题描述】:

我正在使用保存文件对话框来获取我想要保存文件的位置。

private string GetSaveLocationFromUser(string filter)
{
    string location = string.Empty;

    using (SaveFileDialog sfd = new SaveFileDialog())
    {
        sfd.Filter = filter;
        sfd.FilterIndex = 1;
        sfd.RestoreDirectory = true;
        sfd.InitialDirectory = GetFolderNameDefault();
        sfd.FileName = GetFileDefaultName();

        if (sfd.ShowDialog() == DialogResult.OK)
        {
            location = sfd.FileName;
        }
    }
    return location;
}

这在获取文件位置时效果很好,但是当我稍后在代码中实际保存我的文件时,我收到一个异常,指出文件已经存在,因此无法保存文件。

以下代码使用 ClosedXML 将 Excel 文档保存在所选位置。

using (XLWorkbook wb = new XLWorkbook())
{
    wb.Worksheets.Add(data, ReportTitle);
    wb.SaveAs(filename);
    isSuccess = true;
}

如果我将文件名更改 1 个字符,例如test.xlsx --> test1.xlsx 它工作正常。几乎就像保存文件对话框在选择文件时锁定了该文件位置,这意味着我以后不能保存到它?

任何想法都将不胜感激。

【问题讨论】:

  • 检查 .SaveAs` 方法的重载,看看是否有布尔参数,通常会指示文件是否存在以覆盖它.. 或编写检查文件是否存在的代码..然后删除 if 在创建和保存新文件之前..简单修复..
  • 我已经尝试过了,但没有运气,它说当我进行检查时不存在文件。我也只是尝试删除,但没有任何区别。

标签: c# winforms savefiledialog


【解决方案1】:

尝试将Workbook.SaveAsConflictResolution 参数设置为xlLocalSessionChanges,以便它始终接受您的更改。比如:

wb.SaveAs(filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);

【讨论】:

  • 我认为 OP 没有使用 Excel 互操作,而是 ClosedXML。据我所见,ClosedXML.Excel.XLWorkbookwb.SaveAs() 方法除了文件名(或流)之外没有任何参数,并且在任何情况下它都会覆盖任何现有文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多