2013-09-25 5 views
0

У меня есть программа, которая дает случайные файлы. Это просто, но я совершенно новичок в этом. У меня возникли проблемы с созданием списка файлов fileinfo. Я добавил contextmenustrip, у которого есть несколько вариантов жанра файла (например: видеофайлы, текстовые файлы ..)Как получить файлы более одного расширения?

Я хотел определить массив строк с помощью cntxtmnustrp. и хотите, чтобы он создавал новый массив и сочетался с предыдущим. Но это не сработало. Должен ли я создавать arraylist и добавлять к нему каждый список?

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    Random r = new Random(); 
    string path1;   
    DirectoryInfo dif; 
    // List<FileInfo> files; 
    FileInfo[] files; 
    FileInfo[] newfiles; 


    int randomchoose; 
    int fok; 
    int kok, pd; 

    string[] filetypes;  



    private void button1_Click(object sender, EventArgs e) 
    { 

     FolderBrowserDialog hoho = new FolderBrowserDialog(); // yeni dosya yeri 

     hoho.ShowNewFolderButton = true; 

     if (hoho.ShowDialog() == DialogResult.OK) 
     { 
      path1 = hoho.SelectedPath; 
      textBox1.Text = path1; 
      dif = new DirectoryInfo(path1);    

      foreach (string ft in filetypes) 
     { 
      files = dif.GetFiles("*.ft", SearchOption.AllDirectories); 
      //files.AddRange(dif.GetFiles(string.Format("*.{0}", ft), SearchOption.AllDirectories)); 

      newfiles = newfiles.Concat(files); 
     }                

      //pd = liste.Length; 

      pd = files.Length; 
      kok = pd; 
     }     
    } 

     }  
    private void button1_Click_1(object sender, EventArgs e) 
    { 
     listBox1.Sorted = true; 

    } 

    private void cesit_Click(object sender, EventArgs e) 
    { 
     //contextMenuStrip1.Show(); 
     contextMenuStrip1.Show(this.PointToScreen(cesit.Location)); 
    } 


    private void videoFilesToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     filetypes = new string[2] { "txt", "png" }; 

    } 

    private void musicFilesToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     //tur = ".png"; 
     //textBox4.Text = tur; 
    } 

    private void textFilesToolStripMenuItem_Click(object sender, EventArgs e) 
    { 

    } 

} 
+0

Вы можете обновить код, чтобы мы могли иметь весь код. Я думаю, что некоторые части кода отсутствуют –

+0

с полным кодом. и @SriramSakthivel, нам еще не нужно комбинировать список внутри foreach? – emmett

+0

'files = filetypes.SelectMany (x => diff.GetFiles (x, SearchOption.AllDirectories)). ToArray();'? –

ответ

0

Предполагая, что я понимаю, что вы имеете в виду, я бы сделать files массив в List, заменив:

FileInfo[] files; 

с:

List<FileInfo> files; 

Это означает, что вы хотите изменить :

files = dif.GetFiles("*.ft", SearchOption.AllDirectories); 

к:

files.AddRange(dif.GetFiles(string.Format("*.{0}", ft) SearchOption.AllDirectories)); 

Затем вы можете избавиться от списка конкатенации:

newfiles = newfiles.Concat(files); 
+0

Я попытался, но он дал ошибку. "File" был null. а также он не может получить .Lenght из «файла». где я ошибался? – emmett

+0

Спасибо! Я изменил "Список файлов" в "Список files = new Список ()". и chjange «file.lenght» в «file.Count». Он отлично работает. Но у меня возник вопрос, будет рад, если вы ответите на него. Я заменю c.m.strip с помощью combobox. Я хочу, чтобы он получал новый список при изменении combobox. это нормально, чтобы просто скопировать этот «foreach ...» в comboBox1_SelectedIndexChanged .. или как я могу вернуть его в файлы листинга? – emmett

Смежные вопросы