Por que OpenFileDialog mudar a minha pasta de trabalho?
-
06-09-2019 - |
Pergunta
Por que OpenFileDialog mudar a minha pasta de trabalho? Devo assumir muitos func no System.Windows.Forms vai mudar a minha pasta de trabalho?
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
Solução
Ou você pode torná-lo não fazer isso. Veja a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.restoredirectory.aspx" rel="noreferrer"> FileDialog.RestoreDirectory propriedade
Outras dicas
O que nós descobrimos em um projeto atual é que o OpenFileDialog não altera o diretório atual, tornando a propriedade .RestoreDirectory obsoleto. O código no aplicativo usado para alterar o diretório atual, sempre que abrimos um arquivo (quando executado no Windows XP). Já não faz isso no Windows 7. Como resultado, ele quebrou a nossa aplicação, porque agora nosso conjunto de dados não sabe qual diretório o arquivo está em quando tentamos desserializar-lo usando o nome do arquivo sem o caminho completo. Apenas uma palavra de cautela, se você pretende migrar para o Windows 7.
É uma dor, embora em algumas maneiras que você pode antecipar-se ... se você entrar em um processo aberto de diálogo várias vezes (em um aplicativo) muitas vezes você encontrá-lo onde você última deixou.
Se ele afeta o seu código, você poderia tirar um instantâneo de GetCurrentDirectory()
antes de entrar no diálogo, e restaurá-lo mais tarde (para que o seu código não ver a mudança). Você pode querer armazenar o usuário diretório de trabalho em separado (e trocá-los) para que o usuário também recebe o seu comportamento esperado.
O diretório de trabalho atual pode mudar durante a execução, sim.
Considere o uso
Directory.GetParent(Assembly.GetExecutingAssembly().Location)
ou
System.AppDomain.CurrentDomain.BaseDirectory
quando você precisa de seu diretório de aplicativos.
para Porque no XP a mudança filedialog o diretório atual, é melhor perguntar MS. de qualquer maneira o diálogo de arquivo aberto no XP tem este comportamento estranho, mas no w7 ou superior não. assim você pode simplesmente definir o diretório atual depois que você salvou o caminho selecionado de SaveFileDialog taht que alterar o diretório atual.
eu postar meu método onde você pode ver que o caminho chosed é salvo com as configurações e redefinir o diretório atual
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);
}
}