在组合框选择上打开文件

时间:2013-03-01 21:22:53

标签: c#

我有一个组合框,它从我在一个目录中放在一起的文件名中获取项目列表,这样做的目的是让它变得动态 - 我对c#很新,并且它没有发生在我身上一种不同的方式。 - 这是该位的代码:

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

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

3 个答案:

答案 0 :(得分:0)

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

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

您的csv可能如下所示:

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

从这里你可以根据自己的喜好解析新创建的csv。用它来填充你的组合框,索引是它的值和文件名的文本。然后你可以读取你的组合框选择值,从csv索引中获取正确的文件名,最后打开文件。

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

答案 1 :(得分:0)

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

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/";
}

答案 2 :(得分:0)

感谢所有帮助人员,但我想出了如何解决我的问题,我会发布未来事件的代码。 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();
                }
            }
        }