Pourquoi OpenFileDialog changer mon répertoire de travail?
-
06-09-2019 - |
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
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);
}
}