在使用 SaveFileDialog 时,我注意到当路径太长时,WPF 和 WindowsForms 之间的行为存在差异。
要验证这一点,请创建一个长文件夹名称(但不超过允许的 247 个字符),例如:
C:\Looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
创建一个 WindowsForms 项目和一个带有点击事件的窗体按钮:
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog sFile = new SaveFileDialog();
sFile.FileName = "Test.txt";
if (sFile.ShowDialog() == DialogResult.Yes)
Debug.Print(sFile.FileName);
}
}
}
启动程序,移动到保存文件对话框中的长文件夹,输入足够长的名称,如“MyLittleTextFile.txt”,然后按回车。
sFile.FileName 将抛出一个内部异常,因此 Debug.Print 将不会被执行。
现在在 MainWindow 上创建一个 WPF 项目和一个带有点击事件的按钮:
using System.Diagnostics;
using System.Windows;
using Microsoft.Win32;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog sFile = new SaveFileDialog();
sFile.FileName = "Test.txt";
if (sFile.ShowDialog() == true)
Debug.Print(sFile.FileName);
}
}
}
再次启动程序,移至保存文件对话框中的长文件夹,输入足够长的名称,如“MyLittleTextFile.txt”,然后按回车。
sFile.FileName 现在仍会抛出内部异常,但它只会返回“Test.txt”的旧值。
这充其量是令人惊讶的,因为在这一点上,我当然希望该值是我选择的值——或者在尝试使用它时出现错误。在我看来,拥有旧值(value)没有多大意义。有人知道为什么要这样实现吗?这是期望的行为,还是错误?
最佳答案
这是针对 FW 4.7 的 Windows 10 (17134.285)。
输入长文件名时...
sFile.FileName
将包含完整的 UNC 路径。 (见下文)
\\?\C:\LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongFolder\MyLittleTextFile.txt
sFile.SafeFileName
将仅包含文件名。
MyLittleTextFile.txt
对于 WinForms,我无法强制对话框接受长文件名,只能留下较短的文件名或作为选项取消。
没有抛出异常。
关于c# - 这真的是 WPF 的 SaveFileDialog.FileName 中需要的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52409417/