Question

Pourquoi est-ce OpenFileDialog changer mon répertoire de travail? Au cas où j'assumer un grand nombre func dans System.Windows.Forms va changer mon répertoire de travail?

    OpenFileDialog open = new OpenFileDialog();
    open.Filter = filter;
    a = Directory.GetCurrentDirectory(); //<-- correct
    if (open.ShowDialog() == DialogResult.OK) //-- select a file on my desktop
    {
        a = Directory.GetCurrentDirectory(); //<-- incorrect, is set to my desktop
Était-ce utile?

La solution

Ou vous pouvez-il pas faire. Voir FileDialog.RestoreDirectory propriété.

Autres conseils

Ce que nous avons découvert dans un projet en cours est que le OpenFileDialog ne modifie plus le répertoire courant, ce qui rend la propriété .RestoreDirectory obsolète. Le code de l'application utilisée pour changer le répertoire courant à chaque fois que nous avons ouvert un fichier (lors de l'exécution sous Windows XP). Il ne fait plus que dans Windows 7. En conséquence, il a cassé notre application parce que maintenant notre ensemble de données ne sait pas quel répertoire que le fichier est lorsque l'on tente de désérialiser en utilisant le nom du fichier sans le chemin complet. Juste un mot d'avertissement si vous envisagez de migrer vers Windows 7.

Il est une douleur, même si à certains égards, vous pourriez anticiper ... si vous allez dans un dialogue ouvert à plusieurs reprises (dans une application), vous trouvez souvent où vous avez laissé.

Si son impact sur votre code, vous pouvez prendre un instantané de GetCurrentDirectory() avant d'entrer dans la boîte de dialogue, et restaurer par la suite (si votre code ne voit pas le changement). Vous pouvez stocker les l'utilisateur répertoire de travail séparément (et de les échanger) afin que l'utilisateur obtient également leur comportement attendu.

Le répertoire de travail en cours peut changer au cours de l'exécution, oui.

Pensez à utiliser

Directory.GetParent(Assembly.GetExecutingAssembly().Location)

ou

System.AppDomain.CurrentDomain.BaseDirectory

lorsque vous avez besoin de votre répertoire applications.

Pourquoi le XP filedialog changer le répertoire courant, il est préférable de demander à MS. de toute façon la boîte de dialogue de fichier ouvert dans XP a ce comportement étrange, mais pas W7 ou plus. de sorte que vous pouvez simplement définir le répertoire en cours après avoir enregistré le chemin sélectionné de SaveFileDialog Taht il changer le répertoire courant.

Je poste ma méthode où vous pouvez voir que le chemin chosed est enregistré dans les paramètres et réinitialiser le répertoire courant

 private void ShowSaveFileDialog(object sender, RoutedEventArgs e)
    {    
        private const int xpVerMajorNumber = 5;        
        var saveFileDialog = new SaveFileDialog()
        {                
            FileName = Settings.Default.ExcelFileName,
            DefaultExt = "*.xlsx",
            Filter = "Excel Workbook (.xlsx)|*.xlsx"
        };

        if (saveFileDialog.ShowDialog(this) == true)
            Settings.Default.ExcelFileName = saveFileDialog.FileName;


         if (Environment.OSVersion.Version.Major <= xpVerMajorNumber)
        {
       Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
        }

    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top