如果路径长度超过 256,C# OpenFileDialog 不返回正确的路径

C# OpenFileDialog not returning right path if path length is above 256

我正在编写一些小应用程序。应用程序将根据某些选择更改一些文件名。要打开文件,我正在使用 Microsoft.Win32.OpenFileDialog。现在,当我想打开一个路径超过 256 个字符(我想就是这个数字)的文件时,路径会被截断。 例如,我有以下代码来打开文件:

OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = false;
openFileDialog.ValidateNames = false;

if (true == openFileDialog.ShowDialog())
{
    //Working with the returned path
}

然后当我想打开这样一个文件时:C:/a/very/long/file/path/with/more/than/256/characters.txt,我退出对话框的路径是这样的:C:/a/very/long/file/path/with/more/than/256/CHARAC~1.TXT 文件名长度为 230 个字符。

我该如何解决这个问题?

感谢您的帮助。

如评论中所述,这是 Peregrine link 的摘要。

  1. 创建一个新的 .reg 文件。
  2. 将以下内容复制到文件中:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
  1. 保存文件并执行。
  2. 右键单击您的项目并添加一个新的清单文件(如果尚不存在)。
  3. 打开 app.manifest 文件并添加以下内容:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>