如果没有输入,只询问文件名

Only ask for filename if one has not been input

我正在使用 C# 和 winform,并在按钮单击事件中将数据保存到 .xlsx。我有一个独特的情况,我不确定如何编码...... 如果表单仍然显示并且用户单击按钮,我希望它提示输入文件名和保存位置。 但是 如果表单尚未关闭并且用户再次单击该按钮,我希望将 .xlsx 保存在同一位置并使用相同的文件名并在没有提示的情况下覆盖.

这是我用来提示输入保存名称和位置的语法,但是我如何检查以确定是否已经输入了 filename/save 位置,如果已经输入则不再提示?

private void btnOne_Click(object sender, EventArgs e)
{
    SaveFileDialog save = new SaveFileDialog();
    save.InitialDirectory = @"C:\";
    save.RestoreDirectory = true;
    save.Title = "Select save location file name";
    save.DefaultExt = "xlsx";

    if (save.ShowDialog() == DialogResult.OK)
    {
        try
        {
            var file = new FileInfo(save.FileName);
            using (var package = new ExcelPackage(file))
            {
                package.Save();
            }
        }
        catch { Messagebox.Show("An error has occured"; }
    }
}

全局声明:

public string Filename;

然后像这样更改您的子例程:

private void btnOne_Click(object sender, EventArgs e)
{
    if (string.IsNullOrWhiteSpace(Filename))
    {
    SaveFileDialog save = new SaveFileDialog();
    save.InitialDirectory = @"C:\";
    save.RestoreDirectory = true;
    save.Title = "Select save location file name";
    save.DefaultExt = "xlsx";

    if (save.ShowDialog() == DialogResult.OK)
    {
        try
        {
            Filename = save.FileName;
            var file = new FileInfo(save.FileName);
            using (var package = new ExcelPackage(file))
            {
                package.Save();
            }
        }
        catch { MessageBox.Show("An error has occured"); }
    }
    }
    else
    {
        var file = new FileInfo(Filename);
        using (var package = new ExcelPackage(file))
        {
            package.Save();
        }
    }
}

因此,数据是否具有设置的文件名是 class 状态的一部分。在你有 btnOne_Click 的 class 中,只需定义一个带有文件名的字符串,默认为空:

string filepath = null;

然后,您要在 btnOne_Click 中检查文件路径。如果不存在,请打开另存为对话框。之后,如果设置了文件路径,只需保存即可。它将像这样重组:

private void btnOne_Click(object sender, EventArgs e)
{
    if (filepath == null)
    {
        SaveFileDialog save = new SaveFileDialog();
        save.InitialDirectory = @"C:\";
        save.RestoreDirectory = true;
        save.Title = "Select save location file name";
        save.DefaultExt = "xlsx";

        if (save.ShowDialog() == DialogResult.OK) {
            filepath = save.FileName;
        }
    }

    if (filepath != null) 
    {
        try
        {
            var file = new FileInfo(filepath);
            using (var package = new ExcelPackage(file))
            {
                package.Save();
            }
        }
        catch { MessageBox.Show("An error has occured"; }
    }
}

此逻辑结构为您提供了用户按下保存按钮时的标准行为。如果他们取消另存为对话框,则保存将中止并且文件名状态不会更改。