0

1つのディレクトリにまとめたファイルの名前からアイテムのリストを取得するコンボボックスがあります。これの目的は動的にすることです-私は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 を好みに合わせて解析できます。それを使用してコンボボックスにデータを入力します。インデックスはその値であり、ファイル名はそのテキストです。次に、コンボボックスの選択された値を読み取り、csv インデックスから適切なファイル名を取得して、最後にファイルを開くことができます。

長文かもしれませんが、うまくいきます。多次元配列をそのまま使用することもできますが、これは教育の観点からはより楽しく、読み取り/書き込み操作に役立ちます。

于 2013-03-01T21:44:13.917 に答える
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 に答える
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 に答える