如何使用Microsoft.Win32.SaveFileDialog保存文件名超过MAX_PATH的文件?

时间:2019-03-04 15:43:40

标签: c# wpf windows winapi max-path

我正在尝试保存文件:

Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog
        {
            FileName = "verylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexampleverylongexample.foo",
            DefaultExt = ".foo",
            Filter = "Foo Bar|*.foo"
        };

在对话框中按“保存”后,我收到以下消息:

The filename, directory name, or volume label syntax is incorrect.

即使我的app.manifest中有此内容,

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings xmlns:ws2="https://schemas.microsoft.com/SMI/2016/WindowsSettings">
      <ws2:longPathAware>
          true
      </ws2:longPathAware>
</windowsSettings>

如此处所述:https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation

1 个答案:

答案 0 :(得分:-1)

是的,在评论中提到的人表示您的Windows不支持它。

  

从Windows 10 1607版开始,MAX_PATH限制已从常见的Win32文件和目录功能中删除。

现在,要使其跨Windows,您必须创建自定义文件对话框,并使用\\?\Drive:\样式通过路径进行操作。