gpt4 book ai didi

c# - 这真的是 WPF 的 SaveFileDialog.FileName 中需要的行为吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:31 38 4
gpt4 key购买 nike

在使用 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

enter image description here

对于 WinForms,我无法强制对话框接受长文件名,只能留下较短的文件名或作为选项取消。

没有抛出异常。

关于c# - 这真的是 WPF 的 SaveFileDialog.FileName 中需要的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52409417/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com