Как установить длинную строку (> 260) в имени файла по умолчанию в SaveFileDialog? - PullRequest
1 голос
/ 01 декабря 2009

Я использую SaveFileDialog и должен установить длинную строку (longFileName) в FileName. Строка longFileName известна во время выполнения.

Если я установлю

saveFileDialog.FileName = longFileName ;

тогда я получу System.IO.PathTooLongException.

Как я могу это сделать?

Ответы [ 7 ]

5 голосов
/ 01 декабря 2009

Короче, вы не можете; NTFS имеет максимальный размер файла 256.

Мой совет будет сократить ваше имя файла.

4 голосов
/ 01 декабря 2009

Хотя вы можете иметь имена файлов длиннее 260 символов, вы можете столкнуться с некоторыми странностями с API. Кроме того, .net не поддерживает его напрямую.

Если вам нужна дополнительная информация, вот ссылка на первое из трех сообщений в блоге команды BCL о проблеме: http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

1 голос
/ 01 декабря 2009

Вы можете попробовать версию имени файла с коротким путем, используя:

  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
  public static extern int GetShortPathName(
     [MarshalAs(UnmanagedType.LPTStr)] System.String path,
     [MarshalAs(UnmanagedType.LPTStr)] System.Text.StringBuilder shortPath,
     System.Int32 shortPathLength);

Тогда диалог сохранения файла будет выглядеть примерно так:

     string long_path = @"C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\1033\vsdebugui.dll";
     StringBuilder s = new StringBuilder(long_path.Length);
     int short_path_length = GetShortPathName(long_path, s, long_path.Length);
     string short_path = s.ToString();
     SaveFileDialog save_d = new SaveFileDialog();
     save_d.FileName = short_path;
     save_d.ShowDialog();
1 голос
/ 01 декабря 2009

Ответ заключается в следующем:

В: Какое максимальное количество символов может быть в имени файла?

A: Это зависит от того, создается ли файл в разделе FAT или NTFS. Максимальная длина имени файла в разделе NTFS составляет 256 символов, а в FAT - 11 символов (8 символов имени, 3 символа расширения). Имена файлов NTFS сохраняют свой регистр, в то время как имена файлов FAT не имеют понятия регистра (однако регистр игнорируется при выполнении поиска и т. Д. В NTFS). Существует новый VFAT, который также имеет имена файлов из 256 символов.

Источник

Обычно ОС определяет максимальный размер файла, а не ваше приложение. Если в будущем будет выпущена лучшая файловая система, которая будет поддерживать больше символов, вы всегда можете сделать свое программное обеспечение совместимым с последующим совместным использованием, сообщив об этом и сообщив пользователю, когда путь слишком длинный. Тем не менее, с учетом современных достижений технологии вы не можете использовать имя файла длиной более 256 символов.

0 голосов
/ 26 октября 2011

Добавьте \\?\ в начало пути. Так что D:\<very_long_path> станет \\?\D:\<very_long_path>. См. Ссылку «Ограничение максимальной длины пути» в http://msdn.microsoft.com/en-us/library/aa365247.aspx

0 голосов
/ 01 декабря 2009

Как уже упоминали другие, нет хорошего способа обойти это ограничение. Однако проблема не в NTFS, а в Win32 . Используя SFU, вы можете сделать несколько смехотворно длинных путей, если вы действительно этого хотите, но это делает взаимодействие с родным Win32 интересным.

Возможно, вы захотите попробовать добавить путь к \\? \. Я никогда не пробовал это с .NET, хотя.

0 голосов
/ 01 декабря 2009

Вы не можете.

Помните, что пути в Windows должны содержать не более 256 символов. (Если вы не используете специальный трюк)

Почему вам нужно такое длинное имя файла?

...