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

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Благодарностей
41
Баллы
28
Приведите пожалуйста пример удаления в папке файлов размера меньше чем 1 килобайт
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Можно так
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:\Новая папка.
 
Последнее редактирование модератором:

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Благодарностей
41
Баллы
28
Спасибо помогло
 

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Благодарностей
41
Баллы
28
Можно так
Код:
//Расширение файла
            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:\Новая папка.
Подскажите как с помощью такого кода удалить все файлы не взирая на расширение
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Код:
//Путь к папке
            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

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Благодарностей
41
Баллы
28
А можно при помощи такого кода удалить все файлы кроме определенных расширений к примеру.jpg, .gif, .png надо оставить
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Код:
            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

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Благодарностей
41
Баллы
28
Что то все файлы удаляет вот какой код я вставлял
Код:
  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) { }
                        }
                    }
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Замените "||" на "&&". Так должно получиться.
 

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Благодарностей
41
Баллы
28
А как удалить файлы с любым расширением меньше 5 килобайт
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
А как удалить файлы с любым расширением меньше 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

sidor800

Client
Регистрация
16.04.2013
Сообщения
123
Благодарностей
41
Баллы
28
Еще вопрос, а как вместо string path = @"C:\Новая папка"; вставить переменную
побывал такие варианты, но они не работают
string path = project.Variables["имя переменной"];
string path = @project.Variables["имя переменной"];
string path = @"project.Variables["имя переменной"]";
string path = @"project.Variables["имя переменной"].Value";
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113

soprano

Client
Регистрация
25.08.2011
Сообщения
862
Благодарностей
930
Баллы
93
Оживляю тему.
Нужно удалить из папки без расширения вообще.
Что нужно добавить в выше указанный код для этого?
 

westruk

Client
Регистрация
30.03.2020
Сообщения
353
Благодарностей
113
Баллы
43
Подниму) А как сделать, чтобы по вложенным папкам тоже проходился шаблон?
 

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
Подниму) А как сделать, чтобы по вложенным папкам тоже проходился шаблон?
Типа того:
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

westruk

Client
Регистрация
30.03.2020
Сообщения
353
Благодарностей
113
Баллы
43

Reysh

Client
Регистрация
02.12.2018
Сообщения
198
Благодарностей
133
Баллы
43
А по разрешению изображения можно такое же провернуть?) А лучше и по размеру и по разрешению.
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

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
А по разрешению изображения можно такое же провернуть?) А лучше и по размеру и по разрешению.
Как варик, вот так можно:
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

soprano

Client
Регистрация
25.08.2011
Сообщения
862
Благодарностей
930
Баллы
93
А как удалить все испорченные файлы картинок из папки, типа такой
75507
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
А как удалить все испорченные файлы картинок из папки, типа такой
пробовать не буду, но мне кажется что при загрузке битой картинки будет исключение. а там можно уже логику строить как надо
75508
 
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
862
Благодарностей
930
Баллы
93
пробовать не буду, но мне кажется что при загрузке битой картинки будет исключение. а там можно уже логику строить как надо
Посмотреть вложение 75508
Битые, как правило, небольшого размера, и я сделал исключение по размеру - всё, что меньше 100кб - удалить.
Сработало.
 

westruk

Client
Регистрация
30.03.2020
Сообщения
353
Благодарностей
113
Баллы
43

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

westruk

Client
Регистрация
30.03.2020
Сообщения
353
Благодарностей
113
Баллы
43

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Что то не помогает(
Не поможет, ибо нужно убирать foreach и добавлять lock, что бы каждый раз каждый бот по новому запрашивал данные и обрабатывал их поочередно. Поэтому тут либо делать в однопотоке через foreach наверное оптимальный вариант, либо разбивать задания по потокам или как вариант рандомно получать файл из папки, что увеличит шанс того, что каждый поток возьмет уникальный файл.
 
  • Спасибо
Реакции: westruk

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
Типа того:
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 не найденых файлов тогда только тормозить .. значит файлы закончились...
 

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
Этот код отличный ... но бывает такое ... что он тормозит что не может найти файл .... , как то можно подправить что б он не тормозил и дальше продолжал .. .если подряд будет к примеру 10 не найденых файлов тогда только тормозить .. значит файлы закончились...
Можно использовать lock + проверять файл на существование перед удалением + использовать рефреш перед проверкой файла на существование
 

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28
Можно использовать lock + проверять файл на существование перед удалением + использовать рефреш перед проверкой файла на существование
а можешь добавить это в код??
 

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