Ошибка в программе. Запоминается только последний список файлов - C#
Формулировка задачи:
Пытаюсь написать простую программу, которая перебирает папки и ищет файлы, полный путь которых длиннее заданного значения. Все ошибочные файлы хранятся в объекте класса MyClass
Поле folder заполняется правильно, а files - нет, в него заполняются файлы только последней проверяемой папки.
Уже все глаза сломал, но не могу понять почему так. Прошу помочь разобраться.
полный код тут:
программа во вложении (пример с файлами и папками в папке Debug, по умолчанию стоит значение максимальной длины=72, чтобы ошибочными были файлы в папкам "п1" и "п3")
class MyFile { public string folder; public List<string> files; public MyFile() { } public MyFile(string pathfolder) { files = new List<string>(); folder = pathfolder; files.AddRange(Directory.GetFiles(pathfolder)); } }
namespace MyExp { public partial class Form1 : Form { public int len_err; //допустимая длина файла public Form1() { InitializeComponent(); len_err = 112; textBox2.Text = len_err.ToString(); } private void button1_Click(object sender, EventArgs e) { MyFile ob; textBox1.Clear(); len_err = Convert.ToInt32(textBox2.Text); //допустимая длина файла string startpathfolder = Directory.GetCurrentDirectory(); textBox1.AppendText(startpathfolder+Environment.NewLine); int len; // длина пути проверяемого файла string[] pathfolders = Directory.GetDirectories(startpathfolder, "*", SearchOption.AllDirectories); //массив со всеми вложенными папками List<MyFile> allfiles = new List<MyFile>(); //папки с файлами (объект) List<MyFile> allfiles_err = new List<MyFile>(); //папки с ошибочными файлами (объект) List<string> files_err = new List<string>(); //ошибочные файлы List<string> pro = new List<string>(); //для проверки foreach (string s in pathfolders) //заполнить allfiles объектами ob { allfiles.Add(new MyFile(s)); // при создании объекта класса MyFile в конструкторе заполняются поля folder и List<string> files - все файлы в папке } foreach (MyFile o in allfiles) // заполнить структуру allfiles_err папками и ошибочными файлами { textBox1.AppendText(o.folder + Environment.NewLine); files_err.Clear(); foreach (string s in o.files) { len = s.Length; textBox1.AppendText(" " + "[" + len.ToString() + "] " + s + Environment.NewLine); if (len > len_err) { files_err.Add(s); // заполнить массив ошибочными файлами pro.Add(s); textBox1.AppendText("добавлен в files_err " + files_err[0] + Environment.NewLine); } } if (files_err.Count != 0) //если массив с ошибочными файлами не пустой, то создать объект { ob = new MyFile(); ob.folder = o.folder; ob.files = files_err; //MessageBox.Show(files_err[0]); //MessageBox.Show(files_err[1]); // MessageBox.Show(ob.folder); //MessageBox.Show(ob.files[0]); //MessageBox.Show(ob.files[1]); allfiles_err.Add(ob); } textBox1.AppendText(Environment.NewLine + Environment.NewLine); } textBox1.AppendText(Environment.NewLine + "---проверочный массив---" + Environment.NewLine); foreach (string s in pro) { textBox1.AppendText(s + Environment.NewLine); } textBox1.AppendText(Environment.NewLine + "---проверочный массив---" + Environment.NewLine); /* MessageBox.Show(obs_err[0].folder); MessageBox.Show(obs_err[0].files[0]); MessageBox.Show(obs_err[0].files[1]); MessageBox.Show(obs_err[1].folder); MessageBox.Show(obs_err[1].files[0]); MessageBox.Show(obs_err[1].files[1]); */ textBox1.AppendText(Environment.NewLine + "---отчет---" + Environment.NewLine); // печать файлов, длина которых больше заданной foreach (MyFile ob123 in allfiles_err) { textBox1.AppendText(ob123.folder + Environment.NewLine); //имя папки foreach (string s in ob123.files) { textBox1.AppendText(" "+"["+s.Length+"] "+ s + Environment.NewLine); //имена файлов } textBox1.AppendText(Environment.NewLine); } } //private void button1_Click(object sender, EventArgs e) } //public partial class Form1 : Form class MyFile { public string folder; public List<string> files; public MyFile() { } public MyFile(string pathfolder) { files = new List<string>(); folder = pathfolder; files.AddRange(Directory.GetFiles(pathfolder)); } } }
Решение задачи: «Ошибка в программе. Запоминается только последний список файлов»
textual
Листинг программы
List<string> list1 = new List<string>(); list1.Add("aaaa"); list1.Add("bbbb"); list1.Add("cccc"); List<string> list2 = list1; Console.WriteLine(list1.Count); // 3 Console.WriteLine(list2.Count); // 3 list1.Clear(); Console.WriteLine(list1.Count); // 0 Console.WriteLine(list2.Count); // Тоже 0. Как же так???
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д