Ошибка в программе. Запоминается только последний список файлов - 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. Как же так???
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д