приветствую. суть вопроса в заголовке. есть приложение которое каждый раз при входе сканирует папку на наличие лишних файлов. лишние это те которые не определены в list. собственно :
private void DeleteFILES(DAL dal)
{
List<string> Equals = new List<string>();
for (int i = 0; i < dal.getMNamesfromBD().Count; i++)
{
Equals.Add(dal.getMNamesfromBD()[i].ToString());
}
try
{
string CompletePatchToEXE = Directory.GetCurrentDirectory();
DirectoryInfo dir = new DirectoryInfo(CompletePatchToEXE + @"\\materials\\");
foreach (FileInfo file in dir.GetFiles())
{
for (int i=0; i<dal.getMNamesfromBD().Count; i++)
{
if (file.Name != Equals[i]+ ".jpg")
{
file.Delete();
}
}
}
MessageBox.Show("Файлы поставленные в очереди были успешно удалены!", "Редактирование");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
однако вместо того что бы удалять файлы не прописанные в Equals код удаляет вообще все файлы. не могу найти ошибку, подскажите где исправить? спасибо!
Код можно сильно упростить, используя LINQ.
Также освойте метод Path.Combine для работы с путями файловой системы.
var materialsDirectory = Path.Combine(Application.StartupPath, "materials");
List<string> Equals = // заполняем список из БД
var distinct = Directory.GetFiles(materialsDirectory)
.Except(Equals.Select(s => Path.Combine(materialsDirectory, s, ".jpg")));
foreach (var fileName in distinct)
new FileInfo(fileName).Delete();
Если я правильно понял, в списке только названия файлов без полного пути и без расширения.
P. S. Судя по другим вашим вопросам, папка materials используется во многих местах кода. Поэтому добавьте поле формы, куда занесите нужный путь один раз при старте приложения, а далее просто используйте его.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
сколько не читал мсдн так и не понял зачем при заполнении datagridview прописывать еще и SqlDataAdapter а DataTable недостаточно? Может вопрос глупый но я хочу...
После мартовского обновления VSCode и обновления dotnet пакета, если пытаюсь запустить программу через терминал командой dotnet run, получаю ошибку:
ПриветствуюУ меня на форме есть DataGridView заполненный таблицей из БД