2013-03-01 70 views
0

我有一個組合框,它從我放在一起的文件的名稱中獲取項目列表,其目的是爲了使它動態 - 我對c#非常陌生,它沒有對我來說不是一種方式。 - 下面是該位的代碼:在組合框選擇打開文件

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

基本上,這工作得很好,它填充我與我在該路徑的文件的名稱組合框,問題是,我需要打開選中後的文件在組合框中,閱讀它的內容並將它們放在標籤中,我想可能StreamReader會幫助我,但我不知道如何實現它,我搜索了互聯網,但它看起來像沒有人有過相同的想法我。有人可以請指點我正確的方向嗎?一個類似的鏈接或我需要使用的對象的指南將是偉大的,謝謝!

+0

嗯,那真是一個非常新的想法。使用File.ReadAllLines函數而不是StreamReader – VladL 2013-03-01 21:26:57

回答

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(); 
       } 
      } 
     } 
0

你應該做的是將文件的名稱存儲在一個單獨的文件(csv或xml)中。然後使用此文件來加載組合框和作爲索引器。例如

可以說你有文件a.txt,b.txt和c.txt。你應該(就像你已經)以編程方式讀取文件名,然後以任何你想要的格式將它們寫入一個新文件,包括一個唯一的索引方案(數字工作正常)。

您的CSV可能是這樣的:

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

從這裏可以解析新創建的CSV根據自己的喜好。用它來填充你的組合框,索引是它的值和文本的文本。然後你可以閱讀你的combobox selectedvalue,從csv索引中獲取正確的文件名,最後打開文件。

它可能被延長,但它會工作。您也可以使用多維數組,但從教育的角度來看,這更有趣,它可以幫助您進行讀/寫操作。

0

要理解你的問題並不那麼容易。你只想在組合框中顯示文件名W/O擴展名嗎?我希望這段代碼對你有用。

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