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
Foi útil?

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);
        }

    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top