"Коллекция была изменена; невозможно выполнить операцию перечисления."
Я получаю в массив строк files прямой путь до файла(ов) по средствам DragDrop на форму.
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
С помощью foreach хочу вывести все эти файлы в listBox
foreach (string file in files)
{
listBox1.Items.Add(file);
}
Задача естественно не такая простая. Каждый файл представляет собой архив с данными.
Мне требуется открыть этот архив, для записи, и переименовать нужный мне файл - сохранить.
Что я собственно и попытался сделать с помощью библиотеки DotNetZip.
Я использовал за основу решения, пример из документации, вот что вышло:
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
using (ZipFile zip = ZipFile.Read(file))
{
foreach (ZipEntry z in zip)
{
if(z.FileName == "folder/setting.ini")
{
z.FileName = "folder/config.ini";
}
}
zip.Save();
}
listBox1.Items.Add(file);
}
На выходе я получаю Ошибку из темы вопроса. Я понимаю что foreach сохраняет коллекцию и сравнивает её на каждом круге(проходе). Но для чего же в документации DotNetZip для изменения файла в архиве используется именно данный пример? Пока жду ответа иду пробовать через for, мб что-то получится.
Ответы (1 шт):
foreach (ZipEntry z in zip.ToList()) // - Решение
{
if(z.FileName == "folder/setting.ini")
{
z.FileName = "folder/config.ini";
}
}