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