Как удалить файлы меньше определеного размера

  • Автор темы Автор темы sidor800
  • Дата начала Дата начала

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Реакции
44
Баллы
28
Приведите пожалуйста пример удаления в папке файлов размера меньше чем 1 килобайт
 
Можно так
C#:
Развернуть Свернуть Копировать
//Расширение файла
            string extension = ".txt";
            //Размер файла в килобайтах
            int size = 1;
            //Путь к папке
            string path = @"C:\Новая папка";
                foreach (var item in System.IO.Directory.GetFiles(path))
                {
                    System.IO.FileInfo file = new System.IO.FileInfo(item);
                    if (System.IO.Path.GetExtension(item) == extension && file.Length / 1024 <= size)
                    {
                        try
                        {
                            file.Delete();
                        }
                        catch (Exception) { }
                    }
                }
Этот код удалит все файлы с расширением .txt, размер которых <= одному килобайту, расположенных в директории C:\Новая папка.
 
Последнее редактирование модератором:
Спасибо помогло
 
Можно так
Код:
Развернуть Свернуть Копировать
//Расширение файла
            string extension = ".txt";
            //Размер файла в килобайтах
            int size = 1;
            //Путь к папке
            string path = @"C:\Новая папка";
                foreach (var item in System.IO.Directory.GetFiles(path))
                {
                    System.IO.FileInfo file = new System.IO.FileInfo(item);
                    if (System.IO.Path.GetExtension(item) == extension && file.Length / 1024 <= size)
                    {
                        try
                        {
                            file.Delete();
                        }
                        catch (Exception) { }
                    }
                }
Этот код удалит все файлы с расширением .txt, размер которых <= одному килобайту, расположенных в директории C:\Новая папка.

Подскажите как с помощью такого кода удалить все файлы не взирая на расширение
 
Код:
Развернуть Свернуть Копировать
//Путь к папке
            string path = @"C:\Новая папка";
            if (!System.IO.Directory.Exists(path))
                return "Папка не найдена";
            foreach (var item in System.IO.Directory.GetFiles(path))
            {
                System.IO.FileInfo file = new System.IO.FileInfo(item);
                try
                {
                    file.Delete();
                }
                catch (Exception) { }
            }
 
  • Оценить
Реакции: Wide, alekwuy и sidor800
А можно при помощи такого кода удалить все файлы кроме определенных расширений к примеру.jpg, .gif, .png надо оставить
 
Код:
Развернуть Свернуть Копировать
            string path = @"C:\Новая папка";
             if (!System.IO.Directory.Exists(path))
                {
                return "Папка не найдена";
                }
                foreach (var item in System.IO.Directory.GetFiles(path))
                {
                    if (System.IO.Path.GetExtension(item) != ".jpg" ||
                        System.IO.Path.GetExtension(item) != ".gif" ||
                        System.IO.Path.GetExtension(item) != ".png")
                    {
                        try
                        {
                            System.IO.FileInfo file = new System.IO.FileInfo(item);
                            file.Delete();
                        }
                        catch (Exception) { }
                    }
                }
 
  • Оценить
Реакции: Wide и sidor800
Что то все файлы удаляет вот какой код я вставлял
Код:
Развернуть Свернуть Копировать
  string path = @"C:\proekt\images";
                 if (!System.IO.Directory.Exists(path))
                    {
                    return "Папка не найдена";
                    }
                    foreach (var item in System.IO.Directory.GetFiles(path))
                    {
                        if (System.IO.Path.GetExtension(item) != ".jpg" ||
                            System.IO.Path.GetExtension(item) != ".gif" ||
                            System.IO.Path.GetExtension(item) != ".jpeg" ||
                            System.IO.Path.GetExtension(item) != ".JPG" ||
                            System.IO.Path.GetExtension(item) != ".JPEG" ||
                            System.IO.Path.GetExtension(item) != ".bmp" ||
                            System.IO.Path.GetExtension(item) != ".png")
                        {
                            try
                            {
                                System.IO.FileInfo file = new System.IO.FileInfo(item);
                                file.Delete();
                            }
                            catch (Exception) { }
                        }
                    }
 
Замените "||" на "&&". Так должно получиться.
 
А как удалить файлы с любым расширением меньше 5 килобайт
 
А как удалить файлы с любым расширением меньше 5 килобайт
Код:
Развернуть Свернуть Копировать
            //Размер файла в килобайтах
            int size = 5;
            //Путь к папке
            string path = @"C:\Новая папка";
                foreach (var item in System.IO.Directory.GetFiles(path))
                {
                    System.IO.FileInfo file = new System.IO.FileInfo(item);
                    if (file.Length / 1024 <= size)
                    {
                        try
                        {
                            file.Delete();
                        }
                        catch (Exception) { }
                    }
                }

Вам же уже давали похожий код выше. Нужно было просто удалить проверку расширения и всё.
 
  • Оценить
Реакции: sidor800
Еще вопрос, а как вместо string path = @"C:\Новая папка"; вставить переменную
побывал такие варианты, но они не работают
string path = project.Variables["имя переменной"];
string path = @project.Variables["имя переменной"];
string path = @"project.Variables["имя переменной"]";
string path = @"project.Variables["имя переменной"].Value";
 
Оживляю тему.
Нужно удалить из папки без расширения вообще.
Что нужно добавить в выше указанный код для этого?
 
Подниму) А как сделать, чтобы по вложенным папкам тоже проходился шаблон?
 
Подниму) А как сделать, чтобы по вложенным папкам тоже проходился шаблон?
Типа того:
C#:
Развернуть Свернуть Копировать
//-----------------------------------------------------
var pathFolder = @"C:\ZennoProjects\Testing\Images"; // путь к папке.

var extension = "jpg|jpeg|png";                      // расширение файлов (если переменную оставить пустой, то будут учтены все файлы).

var сonsiderFileSize = true;                         // true - учитывать рамер файла; false - не учитывать размер файла.
var size = 70;                                       // размер файла в килобайтах.

var searchOption = SearchOption.AllDirectories;      // TopDirectoryOnly - проход по заданной папке; AllDirectories - проход по заданной и вложенным папкам.
//-----------------------------------------------------

var files = new List<string>();

if (!Directory.Exists(pathFolder)) return "Папки не существует";

files = string.IsNullOrWhiteSpace(extension) ? Directory.EnumerateFiles(pathFolder, "*", searchOption).ToList() :
    Directory.EnumerateFiles(pathFolder, "*", searchOption).Where(x => Regex.IsMatch(Path.GetExtension(x).ToLower(), $@"\.({extension})$")).ToList();

foreach (var file in files)
{
    var fileInfo = new FileInfo(file);
    
    switch (сonsiderFileSize)
    {
        case true:
            if (fileInfo.Length / 1024 <= size)
            {
                try
                {
                    fileInfo.Delete();
                }
                catch (Exception ex)
                {
                    project.SendWarningToLog(ex.Message);
                }
            }
            break;
        case false:
            try
            {
                fileInfo.Delete();
            }
            catch (Exception ex)
            {
                project.SendWarningToLog(ex.Message);
            }
            break;
    }
}
 
  • Оценить
Реакции: westruk
А по разрешению изображения можно такое же провернуть?) А лучше и по размеру и по разрешению.
C#:
Развернуть Свернуть Копировать
string path = project.Variables["path_to_image"].Value; // Путь к файлу
System.Drawing.Bitmap image = new System.Drawing.Bitmap(path);

if(image.Width < 800 && image.Height < 800){
    image.Dispose();
    return false;
}else return true;
 
  • Оценить
Реакции: westruk
А по разрешению изображения можно такое же провернуть?) А лучше и по размеру и по разрешению.
Как варик, вот так можно:
C#:
Развернуть Свернуть Копировать
//-----------------------------------------------------
var pathFolder = @"C:\ZennoProjects\Testing\Images"; // путь к папке.

var extension = "jpg|jpeg|png";                      // расширение файлов (если переменную оставить пустой, то будут учтены все файлы).

var сonsiderFileSize = true;                         // true - учитывать размер файла; false - не учитывать размер файла.
var size = 70;                                       // размер файла в килобайтах.

var width = 700;                                     // ширина в пикселях (если меньше 700, то файл будет удален).
var height = 300;                                    // высота в пикселях (если меньше 300, то файл будет удален).

var searchOption = SearchOption.AllDirectories;      // TopDirectoryOnly - проход по заданной папке; AllDirectories - проход по заданной и вложенным папкам.
//-----------------------------------------------------

var files = new List<string>();

if (!Directory.Exists(pathFolder)) return "Папки не существует";

files = string.IsNullOrWhiteSpace(extension) ? Directory.EnumerateFiles(pathFolder, "*", searchOption).ToList() :
    Directory.EnumerateFiles(pathFolder, "*", searchOption).Where(x => Regex.IsMatch(Path.GetExtension(x).ToLower(), $@"\.({extension})$")).ToList();

Image image;

foreach (var file in files)
{
    var fileInfo = new FileInfo(file);

    try {image = Image.FromFile(fileInfo.FullName);} catch {continue;}

    switch (сonsiderFileSize)
    {   
        case true:
            if (fileInfo.Length / 1024 <= size && image.Width < width || image.Height < height)
            {
                image.Dispose();            
                try
                {
                    fileInfo.Delete();
                }
                catch(Exception ex)
                {
                    project.SendWarningToLog(ex.Message);
                }
            }
            break;
        case false:
            if (image.Width < width || image.Height < height)
            {
                image.Dispose();
                try
                {
                    fileInfo.Delete();
                }
                catch(Exception ex)
                {
                    project.SendWarningToLog(ex.Message);
                }
            }
            break;
    }
}
 
Последнее редактирование:
  • Оценить
Реакции: westruk
А как удалить все испорченные файлы картинок из папки, типа такой
75507
 
А как удалить все испорченные файлы картинок из папки, типа такой
пробовать не буду, но мне кажется что при загрузке битой картинки будет исключение. а там можно уже логику строить как надо
75508
 
  • Оценить
Реакции: soprano
пробовать не буду, но мне кажется что при загрузке битой картинки будет исключение. а там можно уже логику строить как надо
Посмотреть вложение 75508
Битые, как правило, небольшого размера, и я сделал исключение по размеру - всё, что меньше 100кб - удалить.
Сработало.
 
Что то не помогает(
Не поможет, ибо нужно убирать foreach и добавлять lock, что бы каждый раз каждый бот по новому запрашивал данные и обрабатывал их поочередно. Поэтому тут либо делать в однопотоке через foreach наверное оптимальный вариант, либо разбивать задания по потокам или как вариант рандомно получать файл из папки, что увеличит шанс того, что каждый поток возьмет уникальный файл.
 
  • Оценить
Реакции: westruk
Типа того:
C#:
Развернуть Свернуть Копировать
//-----------------------------------------------------
var pathFolder = @"C:\ZennoProjects\Testing\Images"; // путь к папке.

var extension = "jpg|jpeg|png";                      // расширение файлов (если переменную оставить пустой, то будут учтены все файлы).

var сonsiderFileSize = true;                         // true - учитывать рамер файла; false - не учитывать размер файла.
var size = 70;                                       // размер файла в килобайтах.

var searchOption = SearchOption.AllDirectories;      // TopDirectoryOnly - проход по заданной папке; AllDirectories - проход по заданной и вложенным папкам.
//-----------------------------------------------------

var files = new List<string>();

if (!Directory.Exists(pathFolder)) return "Папки не существует";

files = string.IsNullOrWhiteSpace(extension) ? Directory.EnumerateFiles(pathFolder, "*", searchOption).ToList() :
    Directory.EnumerateFiles(pathFolder, "*", searchOption).Where(x => Regex.IsMatch(Path.GetExtension(x).ToLower(), $@"\.({extension})$")).ToList();

foreach (var file in files)
{
    var fileInfo = new FileInfo(file);
   
    switch (сonsiderFileSize)
    {
        case true:
            if (fileInfo.Length / 1024 <= size)
            {
                try
                {
                    fileInfo.Delete();
                }
                catch (Exception ex)
                {
                    project.SendWarningToLog(ex.Message);
                }
            }
            break;
        case false:
            try
            {
                fileInfo.Delete();
            }
            catch (Exception ex)
            {
                project.SendWarningToLog(ex.Message);
            }
            break;
    }
}

Этот код отличный ... но бывает такое ... что он тормозит что не может найти файл .... , как то можно подправить что б он не тормозил и дальше продолжал .. .если подряд будет к примеру 10 не найденых файлов тогда только тормозить .. значит файлы закончились...
 
Этот код отличный ... но бывает такое ... что он тормозит что не может найти файл .... , как то можно подправить что б он не тормозил и дальше продолжал .. .если подряд будет к примеру 10 не найденых файлов тогда только тормозить .. значит файлы закончились...
Можно использовать lock + проверять файл на существование перед удалением + использовать рефреш перед проверкой файла на существование
 
Можно использовать lock + проверять файл на существование перед удалением + использовать рефреш перед проверкой файла на существование
а можешь добавить это в код??
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)