【问题标题】:SaveFileDialog check free space before closing windowSaveFileDialog 在关闭窗口前检查可用空间
【发布时间】:2019-04-08 06:26:45
【问题描述】:

如果没有足够的空间来保存,我想弄清楚如何有效地防止保存数据。

是否可以不关闭 SaveFileDialog 窗口并向用户显示消息?

【问题讨论】:

  • 在 SaveFileDialog 关闭后检查驱动器的可用空间会更有意义,然后显示一条消息。原因是,您知道他们试图保存它的位置(假设它是您的 SaveFileDialog)
  • 你总是可以用你自己的类来包装对话框并实现这个功能:检查空间,按下确定时不关闭,消息为什么这不起作用等等

标签: c# wpf winforms


【解决方案1】:

这将完成您想要实现的目标。与您的请求的唯一区别是您不会在对话框打开时进行检查,而是在实际选择文件后进行检查。随意调整此代码以满足您的需要

    //Call this function instead of SaveFileDialog.Show()
    void showSaveDialog()
    {
        //Open dialog
        SaveFileDialog sfd = new SaveFileDialog();
        sfd.ShowDialog();
        //check if file exists
        if (!File.Exists(sfd.FileName))
        {
            return;
        }
        // get the harddrive the user is saving on and get the free space
        string drive = System.IO.Path.GetPathRoot(sfd.FileName);
        double freeSpace = getFreeSpace(drive);
        double filesize = new System.IO.FileInfo(sfd.FileName).Length;

        //Messagebox if the is not enought space and restart
        if (  filesize > freeSpace)
        {
            MessageBox.Show($"Not enough free space on harddrive {drive}...\nFree space was {freeSpace} and file was {filesize}","Storage Error");
            showSaveDialog();
        }
        else
        {
            //save your file here
        }

    }

    double getFreeSpace(string drive)
    {
        DriveInfo[] allDrives = DriveInfo.GetDrives();

        foreach (DriveInfo d in allDrives)
        {
            if (d.Name==drive)
            {
                return d.AvailableFreeSpace;
            }
        }
        return 0;
    }

【讨论】:

  • 很高兴我能帮上忙 :)
  • 很奇怪。提出此方法的人获得了 3 个赞成票,但您实施了它并且根本没有赞成票
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多