按组合框选择打开文件

本文关键字:文件 选择 组合 | 更新日期: 2023-09-27 18:02:00

我有一个组合框,它从我放在一个目录中的文件名称中获取项目列表,这样做的目的是使其动态-我对c#非常陌生,并且没有想到不同的方式。-这是该位的代码:

string[] files = Directory.GetFiles(templatePath);
        foreach (string file in files)
            cbTemplates.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file));

基本上,这工作得很好,它填充我的组合框与我在该路径上的文件的名称,问题是我需要打开在组合框中选择的文件并读取其内容并将它们放在标签中,我在想也许StreamReader会在这里帮助我,但我没有线索如何实现它,我已经搜索了互联网,但看起来没有人在我之前有相同的想法。有人能给我指个正确的方向吗?一个链接到类似的东西或指南的对象,我需要使用将是伟大的,谢谢!

按组合框选择打开文件

您应该做的是将这些文件的名称存储在一个单独的文件中(csv或xml)。然后使用此文件来加载组合框并作为索引器。

为例,假设你有a.txt, b.txt和c.txt文件。你应该(就像你已经做的那样)以编程方式读取文件名,然后以你想要的任何格式将它们写入一个新文件,包括一个唯一的索引方案(数字工作很好)。

您的CSV可能看起来像这样:

1, a.txt,
2, b.txt,
3, c.txt,

可以根据自己的喜好解析新创建的CSV。用它来填充你的组合框,索引是它的值,文件名是它的文本。然后,您可以读取组合框的selectedvalue,从csv索引中获得适当的文件名,最后打开文件。

它可能是冗长的,但它会工作。您也可以使用多维数组,但从教育的角度来看,这更有趣,它将帮助您进行读/写操作。

要理解你的问题并不容易。你只是想在你的组合框中显示没有扩展名的文件名吗?我希望这段代码对你有用。

internal class FileDetail
{
    public string Display { get; set; }
    public string FullName { get; set; }
}
public partial class Example: Form // This is just widows form. InitializeComponent is implemented in separate file.
{
    public Example()
    {
        InitializeComponent();
        filesList.SelectionChangeCommitted += filesListSelectionChanged;
        filesList.Click += filesListClick;
        filesList.DisplayMember = "Display";
    }        
    private void filesListClick(object sender, EventArgs e)
    {
        var dir = new DirectoryInfo(_baseDirectory);
        filesList.Items.AddRange(
            (from fi in dir.GetFiles()
            select new FileDetail
            {
                Display = Path.GetFileNameWithoutExtension(fi.Name),
                FullName = fi.FullName
            }).ToArray()
        );
    }
    private void filesListSelectionChanged(object sender, EventArgs e)
    {            
        var text = File.ReadAllText(
            (filesList.SelectedItem as FileDetail).FullName
        );
        fileContent.Text = text;
    }
    private static readonly string _baseDirectory = @"C:/Windows/System32/";
}

感谢大家的帮助,但我已经知道如何解决我的问题了,我会发布代码以备将来发生的事件。pd。很抱歉这么久才回复你,我在度假

string[] fname = Directory.GetFiles(templatePath); // Gets all the file names from the path assigned to templatePath and assigns it to the string array fname
        // Begin sorting through the file names assigned to the string array fname
        foreach (string file in fname)
        {
            // Remove the extension from the file names and compare the list with the dropdown selected item
            if (System.IO.Path.GetFileNameWithoutExtension(file) != cbTemplates.SelectedItem.ToString())
            {
                // StreamReader gets the contents from the found file and assigns them to the labels
                using (var obj = new StreamReader(File.OpenRead(file)))
                {
                    lbl1.Content = obj.ReadLine();
                    lbl2.Content = obj.ReadLine();
                    lbl3.Content = obj.ReadLine();
                    lbl4.Content = obj.ReadLine();
                    lbl5.Content = obj.ReadLine();
                    lbl6.Content = obj.ReadLine();
                    lbl7.Content = obj.ReadLine();
                    lbl8.Content = obj.ReadLine();
                    lbl9.Content = obj.ReadLine();
                    lbl10.Content = obj.ReadLine();
                    obj.Dispose();
                }
            }
        }