如果路径长度超过 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 的摘要。
- 创建一个新的
.reg
文件。
- 将以下内容复制到文件中:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
- 保存文件并执行。
- 右键单击您的项目并添加一个新的清单文件(如果尚不存在)。
- 打开
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>
我正在编写一些小应用程序。应用程序将根据某些选择更改一些文件名。要打开文件,我正在使用 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 的摘要。
- 创建一个新的
.reg
文件。 - 将以下内容复制到文件中:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
- 保存文件并执行。
- 右键单击您的项目并添加一个新的清单文件(如果尚不存在)。
- 打开
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>