簡體   English   中英

Microsoft.Win32中的OpenFileDialog.FileName返回空字符串

[英]OpenFileDialog.FileName from Microsoft.Win32 returning empty strings

我正在測試一個帶有控制台應用程序的類,並且在類中要求用戶選擇一個文件。 我創建一個OpenFileDialog類實例,設置過濾器,激活multiselect並調用ShowDialog()。 我選擇一個文件/ s並返回true但是FileName字段中有一個空字符串,FileNames中有一個0項字符串[]。 我錯過了什么?

這是代碼:

private static string[] OpenFileSelector(string extension1)
{
    OpenFileDialog op = new OpenFileDialog();
    op.InitialDirectory = @"C:\";
    op.Title = "Seleccione los archivos";
    op.Filter = "|*." + extension1;
    op.Multiselect = true;

    bool? res = op.ShowDialog();

    if (res != null && res.Value) return op.FileNames;
    return null;
}

擴展永遠不會是空的,我嘗試過幾個文件擴展名。 為了記錄,我在Win32之前使用了Forms類,它工作正常。

我同意評論說,在控制台應用程序中使用對話框窗口並不理想,至少可以這么說。 對於顯示窗口的命令行工具,即使在Visual Studio工具中也有歷史先例,但在這些情況下,這是一個非常有限的場景:命令行幫助的GUI版本。 如果你想要一個控制台程序,編寫一個控制台程序並放棄GUI。 如果您想要GUI,那么編寫一流的GUI程序並將控制台窗口從中刪除。

也就是說,在我看來,您的問題與程序的控制台性質無關。 相反,它只是您沒有提供文件類型過濾器的描述。 我不清楚為什么這會改變對話框的行為,但確實如此。 換成這樣的東西:

private static string[] OpenFileSelector(string description, string extension1)
{
    if (string.IsNullOrEmpty(description))
    {
        throw new ArgumentException("description must be a non-empty string");
    }

    OpenFileDialog op = new OpenFileDialog();
    op.InitialDirectory = @"C:\";
    op.Title = "Seleccione los archivos";
    op.Filter = description + "|*." + extension1;
    op.Multiselect = true;

    bool? res = op.ShowDialog();

    if (res != null && res.Value) return op.FileNames;
    return null;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM