强制文件浏览器按名称对文件进行排序

时间:2018-04-08 00:50:09

标签: c# wpf

我有一个按钮,用于打开文件浏览器并选择多个文件,然后将其添加到ListView

如何强制“浏览器”对话框始终按名称对文件进行排序,然后再添加到ListView

有时,Windows默认为Date Modified或除Name之外的其他排序方法。

注意:我在List中有完整的文件路径,只有ListView中的文件名。

private void btnInput_Click(object sender, RoutedEventArgs e)
{
    // Open Select File Window
    Microsoft.Win32.OpenFileDialog selectFiles = new Microsoft.Win32.OpenFileDialog();

    selectFiles.Multiselect = true;

    // Process Dialog Box
    Nullable<bool> result = selectFiles.ShowDialog();

    if (result == true)
    {
        // Add Path+Filename to List
        foreach (String file in selectFiles.FileNames)
        {
            lstFilesPaths.Add(file);
        }

        // Add List Filename to ListView
        lsvFiles.Items.Clear();
        foreach (String name in fileList)
        {
            lsvFileNames.Items.Add(Path.GetFileName(name));
        }
    }
}

file browser

2 个答案:

答案 0 :(得分:1)

文件浏览器本身不会按文件名对结果进行排序,您需要在使用它们之前这样做。

鉴于lstFilesPaths是一个字符串列表,您要将所选文件路径保存到其他位置,请尝试按文件名称添加以下内容对列表进行排序:

foreach (var name in lstFilesPaths.Select(f => Path.GetFileName(f)).OrderBy(s => s))
{
    lsvFileNames.Items.Add(name);
}

或者,如果您同时对文件路径列表和文件名列表视图进行排序,请尝试以下操作:

// Add Path+Filename to List
lstFilesPaths.AddRange(selectFiles.FileNames.OrderBy(f => Path.GetFileName(f)));

// Add List Filename to ListView
lsvFiles.Items.Clear();
foreach (var name in lstFilesPaths.Select(f => Path.GetFileName(f)))
{
    lsvFileNames.Items.Add(name);
}

答案 1 :(得分:0)

尝试改为:

lstFilePaths.AddRange(selectFiles.FileNames.OrderBy(x => x))
lsvFileNames.Items.Clear();
lstFilePaths.ForEach(x => lsvFileNames.Items.Add(Path.GetFileName(x)));