При использовании 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».
В лучшем случае это удивительно, потому что в этот момент я ожидаю, что значение будет тем, которое я выбрал - или получаю ошибку при попыткеиспользовать это.Имея старое значение не имеет большого смысла в моих глазах.Кто-нибудь знает, почему это было реализовано таким образом?Это желаемое поведение, или это ошибка?