0

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

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

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

4

3 回答 3

0

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

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

您的 csv 可能如下所示:

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

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

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

于 2013-03-01T21:44:13.917 回答
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/";
}
于 2013-03-01T21:55:34.477 回答
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();
                }
            }
        }
于 2013-03-25T21:58:20.533 回答