Это действительно желаемое поведение в SaveFileDialog.FileName для WPF? - PullRequest
0 голосов
/ 19 сентября 2018

При использовании SaveFileDialog я заметил, что существует разница в поведении между WPF и WindowsForms, когда путь слишком длинный.

Чтобы убедиться в этом, создайте длинное имя папки (но не более разрешенного247 символов), например:

1004 * C: \ LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongFolder 1006 * Создание проекта WindowsForms и кнопки на форме с событием, нажмите: 1008

Запустить программу, перейдите в длинную папку в SaveFileDialog, введите достаточно длинное имя, например «MyLittleTextFile.txt», и нажмите enter.

sFile.FileName вызовет внутреннее исключение, и, таким образом, Debug.Print будетне выполняется.

Теперь создайте проект 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);
        }
    }
}

Снова запустите программу, мПерейдите в длинную папку в SaveFileDialog, введите достаточно длинное имя, например «MyLittleTextFile.txt», и нажмите enter.

sFile.FileName теперь по-прежнему вызывает внутреннее исключение, но простовернитесь к старому значению «Test.txt».

В лучшем случае это удивительно, потому что в этот момент я ожидаю, что значение будет тем, которое я выбрал - или получаю ошибку при попыткеиспользовать это.Имея старое значение не имеет большого смысла в моих глазах.Кто-нибудь знает, почему это было реализовано таким образом?Это желаемое поведение, или это ошибка?

1 Ответ

0 голосов
/ 20 сентября 2018

Это было в Windows 10 (17134.285) для FW 4.7.

При вводе длинного имени файла ...

sFile.FileName Будет содержать полный UNC-путь.(см. ниже)

\\?\C:\LooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongFolder\MyLittleTextFile.txt

sFile.SafeFileName Будет содержать только имя файла.

MyLittleTextFile.txt

enter image description here

С WinForms мне не удалось заставить диалоговое окно принять длинное имя файла, оставив только более короткое имя файла или отменив в качестве опции.

Не было выдано никаких исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...