Ошибка в программе. Запоминается только последний список файлов - C#

Узнай цену своей работы

Формулировка задачи:

Пытаюсь написать простую программу, которая перебирает папки и ищет файлы, полный путь которых длиннее заданного значения. Все ошибочные файлы хранятся в объекте класса MyClass
Листинг программы
  1. class MyFile
  2. {
  3. public string folder;
  4. public List<string> files;
  5. public MyFile()
  6. {
  7. }
  8. public MyFile(string pathfolder)
  9. {
  10. files = new List<string>();
  11. folder = pathfolder;
  12. files.AddRange(Directory.GetFiles(pathfolder));
  13. }
  14. }
Поле folder заполняется правильно, а files - нет, в него заполняются файлы только последней проверяемой папки. Уже все глаза сломал, но не могу понять почему так. Прошу помочь разобраться. полный код тут:
Листинг программы
  1. namespace MyExp
  2. {
  3. public partial class Form1 : Form
  4. {
  5. public int len_err; //допустимая длина файла
  6. public Form1()
  7. {
  8. InitializeComponent();
  9. len_err = 112;
  10. textBox2.Text = len_err.ToString();
  11. }
  12. private void button1_Click(object sender, EventArgs e)
  13. {
  14. MyFile ob;
  15. textBox1.Clear();
  16. len_err = Convert.ToInt32(textBox2.Text); //допустимая длина файла
  17. string startpathfolder = Directory.GetCurrentDirectory();
  18. textBox1.AppendText(startpathfolder+Environment.NewLine);
  19. int len; // длина пути проверяемого файла
  20. string[] pathfolders = Directory.GetDirectories(startpathfolder, "*", SearchOption.AllDirectories); //массив со всеми вложенными папками
  21. List<MyFile> allfiles = new List<MyFile>(); //папки с файлами (объект)
  22. List<MyFile> allfiles_err = new List<MyFile>(); //папки с ошибочными файлами (объект)
  23. List<string> files_err = new List<string>(); //ошибочные файлы
  24. List<string> pro = new List<string>(); //для проверки
  25. foreach (string s in pathfolders) //заполнить allfiles объектами ob
  26. {
  27. allfiles.Add(new MyFile(s)); // при создании объекта класса MyFile в конструкторе заполняются поля folder и List<string> files - все файлы в папке
  28. }
  29.  
  30. foreach (MyFile o in allfiles) // заполнить структуру allfiles_err папками и ошибочными файлами
  31. {
  32. textBox1.AppendText(o.folder + Environment.NewLine);
  33. files_err.Clear();
  34. foreach (string s in o.files)
  35. {
  36. len = s.Length;
  37. textBox1.AppendText(" " + "[" + len.ToString() + "] " + s + Environment.NewLine);
  38. if (len > len_err)
  39. {
  40. files_err.Add(s); // заполнить массив ошибочными файлами
  41. pro.Add(s);
  42. textBox1.AppendText("добавлен в files_err " + files_err[0] + Environment.NewLine);
  43. }
  44. }
  45. if (files_err.Count != 0) //если массив с ошибочными файлами не пустой, то создать объект
  46. {
  47. ob = new MyFile();
  48. ob.folder = o.folder;
  49. ob.files = files_err;
  50. //MessageBox.Show(files_err[0]);
  51. //MessageBox.Show(files_err[1]);
  52. // MessageBox.Show(ob.folder);
  53. //MessageBox.Show(ob.files[0]);
  54. //MessageBox.Show(ob.files[1]);
  55. allfiles_err.Add(ob);
  56.  
  57. }
  58. textBox1.AppendText(Environment.NewLine + Environment.NewLine);
  59. }
  60. textBox1.AppendText(Environment.NewLine + "---проверочный массив---" + Environment.NewLine);
  61. foreach (string s in pro)
  62. {
  63. textBox1.AppendText(s + Environment.NewLine);
  64. }
  65. textBox1.AppendText(Environment.NewLine + "---проверочный массив---" + Environment.NewLine);
  66. /*
  67. MessageBox.Show(obs_err[0].folder);
  68. MessageBox.Show(obs_err[0].files[0]);
  69. MessageBox.Show(obs_err[0].files[1]);
  70. MessageBox.Show(obs_err[1].folder);
  71. MessageBox.Show(obs_err[1].files[0]);
  72. MessageBox.Show(obs_err[1].files[1]);
  73. */
  74.  
  75. textBox1.AppendText(Environment.NewLine + "---отчет---" + Environment.NewLine);
  76. // печать файлов, длина которых больше заданной
  77. foreach (MyFile ob123 in allfiles_err)
  78. {
  79. textBox1.AppendText(ob123.folder + Environment.NewLine); //имя папки
  80. foreach (string s in ob123.files)
  81. {
  82. textBox1.AppendText(" "+"["+s.Length+"] "+ s + Environment.NewLine); //имена файлов
  83. }
  84. textBox1.AppendText(Environment.NewLine);
  85. }
  86.  
  87. } //private void button1_Click(object sender, EventArgs e)
  88.  
  89. } //public partial class Form1 : Form
  90.  
  91. class MyFile
  92. {
  93. public string folder;
  94. public List<string> files;
  95. public MyFile()
  96. {
  97. }
  98.  
  99. public MyFile(string pathfolder)
  100. {
  101. files = new List<string>();
  102. folder = pathfolder;
  103. files.AddRange(Directory.GetFiles(pathfolder));
  104. }
  105. }
  106. }
программа во вложении (пример с файлами и папками в папке Debug, по умолчанию стоит значение максимальной длины=72, чтобы ошибочными были файлы в папкам "п1" и "п3")

Решение задачи: «Ошибка в программе. Запоминается только последний список файлов»

textual
Листинг программы
  1. List<string> list1 = new List<string>();
  2. list1.Add("aaaa"); list1.Add("bbbb"); list1.Add("cccc");
  3.  
  4. List<string> list2 = list1;
  5.  
  6. Console.WriteLine(list1.Count); // 3
  7. Console.WriteLine(list2.Count); // 3
  8.  
  9. list1.Clear();
  10.  
  11. Console.WriteLine(list1.Count); // 0
  12. Console.WriteLine(list2.Count); // Тоже 0. Как же так???

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы