Как удалить файл из папки c
Перейти к содержимому

Как удалить файл из папки c

  • автор:

Удаление файлов

Функция remove() удаляет файлы. Она имеет следующий прототип:

int remove(const char *имя_файла);

В случае удачного выполнения она возвращает ноль, а в случае неудачного — не ноль.

Следующая программа использует remove() для удаления файла, определяемого пользователем:

/* пример использования remove() */
#include
int main(void)
char fname[80];
printf («Name of file to remove: «);
gets(fname);
if(remove(fname)) printf(«Error removing file»);
return 1;
>
else return 0;
>

Дело техники: 10 способов избавиться от мусора в Windows и освободить место на диске

Накопитель компьютера забит под завязку и трещит по швам, а удалять драгоценные файлы рука не поднимается. Знакомая ситуация, не правда ли? Рассказываем, как малой кровью решить данную проблему, и бонусом делимся лайфхаками по экономии дискового пространства в среде Windows

Любым, даже самым современным программным платформам свойственна тенденция к захламлению диска с течением времени, и Windows не является исключением. Создаваемые ОС и различными приложениями временные файлы, дубликаты системных библиотек, теневые копии, логи, инсталяционные файлы, патчи, апдейты, кешируемые браузером веб-страницы и прочий мусор — всё это копится и разрастается как снежный ком, забивая в итоге свободное пространство на накопителе любого объёма. Хорошего в этом мало, но и печалиться сильно не стоит: существуют простые способы быстро очистить дисковую память компьютера от хлама без удаления нужных данных и риска навредить компьютеру.

 Источник изображения: Jürgen Eick / pixabay.com

Источник изображения: Jürgen Eick / pixabay.com

1. Использование встроенных в Windows средств очистки диска. Наиболее эффективный и безопасный вариант, для использования которого необходимо проследовать в меню «Пуск → Параметры → Система → Память → Временные файлы». ОС проанализирует содержимое накопителя и отобразит список доступных для удаления файлов, включая копии обновлений Windows, эскизы изображений, кеш DirectX и системных служб, диагностические логи, а также прочие данные, суммарный объём которых может достигать десятка гигабайт. Часть файлов система автоматически помечает для удаления, часть — оставляет на усмотрение пользователя. Особое внимание при работе с утилитой следует обратить на папку «Загрузки», в которой могут находиться важные данные и документы.

2. Ручное удаление временных файлов. Опыт работы с Windows показывает, что встроенные в систему средства очистки диска оставляют без внимания немало мусора. Речь идёт о директориях C:\Windows\Temp и C:\Users\Имя_пользователя\AppData\Local\Temp, содержимое которых можно смело удалять. Кроме того, не лишним будет проинспектировать папку C:\Users\Имя_пользователя\AppData\Roaming, в которой остаются многочисленные «хвосты» удалённых приложений — этот балласт тоже имеет смысл отправить в корзину. Для работы с упомянутыми директориями необходимы права администратора, здравый смысл и внимание к деталям. Также полезным будет в настройках проводника Windows активировать отображение скрытых файлов.

3. Удаление теневых копий и точек восстановления. В зависимости от настроек Windows автоматически создаёт снимки томов дисков, резервные копии системных файлов и пользовательских документов. Если система работает как часы и в надёжности хранения данных нет сомнений, эти резервные копии можно удалить и тем самым освободить место на диске. Для этого следует открыть консоль с администраторскими правами, ввести команду vssadmin list shadows для просмотра списка существующих теневых копий на накопителе, а затем набрать vssadmin delete shadows /all для их удаления. Аналогичного результата можно добиться, открыв настройки защиты системы (меню «Пуск → Параметры → Система → О системе → Защита системы → Настроить») и щёлкнув по клавише «Удалить».

4. Очистка папки C:\Windows\Installer. Немногие догадываются о существовании в Windows системной директории Installer, в которую инсталляторы различных приложений складируют установочные файлы. Со временем эта папка забивается мусором и разрастается до неимоверных размеров. Самостоятельная очистка этой директории чревата проблемами, поэтому в этом деле лучше всего довериться бесплатной утилите PatchCleaner, которая грамотно и предельно аккуратно подходит к решению данной задачи. Приложение анализирует содержимое директории Installer на предмет связанности с установленным на компьютере софтом и находит ненужные файлы, которые можно либо переместить на другой логический раздел диска или накопитель большего объёма, либо удалить без вреда системе.

5. Удаление кеша браузеров. Простейшая процедура, которая позволяет высвободить сотни мегабайт на диске ПК. В Google Chrome для очистки временных файлов нужно проследовать в настройки веб-обозревателя, далее в меню «Конфиденциальность и безопасность → Очистить историю» указать временной диапазон «Всё время», затем пометить галочкой пункт «Изображения и другие файлы, сохранённые в кеше» и нажать «Удалить данные». В Microsoft Edge данный инструментарий расположен в меню «Параметры → Конфиденциальность, поиск и службы → Удалить данные о просмотре веб-страниц → Выбрать элементы для удаления», в «Яндекс.Браузере» — в окне «Настройки → Системные → Очистить историю». В Firefox необходимо проследовать в «Настройки → Приватность и защита → Cookie и данные сайтов → Удалить данные». Не запутаться в хитросплетениях меню браузеров помогут нижеследующие скриншоты.

6. Удаление лишних учётных записей. Нередко причиной захламления диска компьютера являются неиспользуемые и давно забытые пользовательские аккаунты Windows, в которых хранятся документы, фотографии, музыка и прочие не представляющие ценности, но занимающие место файлы. Избавится от старых и потерявших актуальность учётных записей можно в разделе «Параметры → Учётные записи → Семья и другие пользователи». Проведение данной процедуры возможно только при наличии административных прав в системе.

7. Отключение неиспользуемых компонентов системы. В состав Windows включено немало программных модулей, которые редко оказываются нужны пользователям и могут быть деактивированы с целью экономии дискового пространства. Сделать это можно в разделе «Параметры → Приложения → Дополнительные компоненты → Другие компоненты Windows». В открывшемся окне настроек можно отключить браузер Internet Explorer 11, проигрыватель Windows Media, инструментарий PowerShell, средства печати, подсистему Windows Subsystem for Linux, а также прочие ненужные компоненты. Деактивация последних сопровождается удалением с диска связанных файлов и библиотек, а также последующей перезагрузкой ОС. В случае необходимости отключённые программные модули впоследствии можно активировать повторно — все недостающие файлы Windows автоматически скачает из интернета.

8. Анализ содержимого дискового пространства. Для решения этой задачи рекомендуем воспользоваться бесплатной утилитой WinDirStat, которая сканирует хранящиеся на накопителе файлы и отображает занимаемое ими место в виде наглядной графической карты, позволяющей без труда вычленить «тяжеловесов» из огромного массива данных. Приложение помогает увидеть подробную картину использования дисковой памяти и наметить шаги по удалению ненужных файлов.

9.Удаление аварийных дампов памяти. При возникновении критических ошибок Windows, сопровождающихся «синими экранами смерти» (Blue Screen of Death, BSoD), операционная система автоматически сохраняет в папке C:\Windows\Minidump дампы оперативной памяти, позволяющие опытным специалистам установить причины сбоев. Если компьютер функционирует стабильно, то от сохранённых ранее аварийных дампов можно смело избавиться — лишние файлы на диске ни к чему.

10. Сжатие файлов на уровне файловой системы и средствами Windows. Если перечисленные выше действия не помогли добиться желаемого результата, тогда можно прибегнуть к использованию функций автоматического сжатия хранящихся на накопителе файлов. Сделать это можно двумя способами: средствами файловой системы NTFS и при помощи функции Compact OS (доступна в Windows 10/11). В первом случае необходимо зайти в свойства системного диска, на вкладке «Общие» выбрать пункт «Сжать этот диск для экономии места», нажать «Применить» и дождаться обработки файлов. Во втором — следует открыть консоль с правами администратора, после чего проверить текущее состояние системы командой compact.exe /CompactOS:query, а затем ввести compact.exe /CompactOS:always для сжатия файлов в папках Windows и Program Files. Те, кому лень возиться с командной строкой, могут воспользоваться OpenSource-утилитой CompactGUI, представляющей собой графический интерфейс для системной утилиты compact.exe.

По данным специализирующегося на софтверных решениях Microsoft сайта Outsidethebox.ms, использование технологии Compact OS позволяет сэкономить до 40 процентов дискового пространства. Впечатляющий показатель! При этом нужно понимать, что сжатие файлов «на лету» как на уровне файловой системы, так и средствами Windows требует некоторых вычислительных ресурсов, а поэтому придётся мириться с незначительным (в большинстве случаев практически незаметным) замедлением работы компьютера. Для возвращения стандартных настроек ОС и отключения сжатия NTFS всегда можно снять соответствующую галку в настройках системного диска, а для деактивации Compact OS — воспользоваться инструкцией compact.exe /CompactOS:never.

Надеемся, что приведённые нами рекомендации пригодятся и принесут пользу всем пользователям Windows, регулярно сталкивающимся с нехваткой свободного места на диске компьютера. Особенно актуальными наши советы будут для владельцев нетбуков и недорогих ноутбуков, производители которых обычно для хранения данных применяют бюджетные HDD/SSD небольшого объёма и тем самым создают немало головной боли обладателям таких компьютеров. Если у вас есть что добавить по теме материала, не стесняйтесь — будьте первыми, кто прокомментирует публикацию!

Как удалить файл из папки c

Kaspersky for Windows защищает вашу цифровую жизнь, выходя за рамки обычного антивируса.

Каждое приложение в Microsoft Windows во время своей работы создает временные файлы на компьютере в папке TEMP, которые должны автоматически удаляться после завершения работы приложения. При ошибках в приложении временные файлы не удаляются и занимают свободное место на жестком диске.

Чтобы самостоятельно очистить папку TEMP в Microsoft Windows для вашей учетной записи:

Клавиша Windows на клавиатуре

  1. Запустите диалоговое окно Выполнить, нажав +R на клавиатуре.

Запуск диалогового окна Выполнить в Windows

Переход в папку TEMP в Windows

  1. Нажмите Ctrl+A на клавиатуре, чтобы выделить все файлы в открывшейся папке.
  2. Нажмите Del (Delete) на клавиатуре, чтобы удалить файлы.

Некоторые файлы из папки TEMP могут быть недоступны для удаления, если приложение, создавшее их, в настоящий момент работает. Мы рекомендуем пропустить такие файлы при удалении.

Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки

Скорей всего, матерым системным администраторам статья будет не очень интересна. В первую очередь она ориентирована на новичков, а также на людей, которые столкнулись с подобной проблемой — необходимостью удалить огромное количество файлов из одной папки в ОС Linux (Debian в моем случае), а также с закончившимся местом на диске, когда df -h выдает что почти 30% свободно.

Начало

Ничто не предвещало беды.
Сервер с сайтом работал без никаких проблем уже больше года (uptime почти 500 дней), не было никаких проблем, и я с чистой душой спокойно ушел в отпуск.

В первый же день отпуска мне звонят с жалобой — сайт недоступен. MySQL падает с ошибкой Error 28 «No space left on device».

Казалось бы, проблема банальна — кончилось место на диске. Правда, df -h показывает, что на диске имеется вполне достаточное количество свободного места, ну да я же в отпуске, разбираться лень — посоветовал им поискать на диске ненужные файлы (старые бекапы и т.д.) и их удалить. Удалили, вроде все заработало.

Прошла пара часов и проблема вернулась. Странно — свободное место на жестком диске за это время практически не уменьшилось. После беглого гугления обнаружился топик на serverfault, в котором говорится, что проблема может возникнуть также из-за того, что кончилось не место на диске, а айноды!

Ввожу в консоль df -i — и оказывается действительно, айноды у меня закончились.

Проблема

Начал искать, где же у меня находится столько файлов на жестком диске, что они сожрали все айноды (а айнодов у меня на 500-гигабайтном жестком диске больше 30 миллионов).

И нашел — оказалось, проблема была в папке с сессиями php.

Видимо, по какой-то причине сломался механизм автоочистки этой папки, что привело к тому, что в ней скопилось огромное количество файлов. Насколько огромное — сказать сложно, потому что никакие стандартные команды линукс, такие, как ls, find, rm и т.д. — с этой папкой не работают. Просто виснут, заодно подвешивая весь сервер. Могу только сказать, что сам файл директории стал весит около гигабайта, а также что файлов там точно более полумиллиона, потому что столько я оттуда уже удалил.

Решение

Решение очевидное — надо удалить все эти файлы сессий. При этом желательно, чтобы сервер продолжал работать в штатном режиме. Для начала я переименовал папку сессий, в которой лежит куча файлов, а вместо нее создал пустую — чтобы спокойно из старой (переименованной) удалять все файлы, и чтобы это не мешало созданию новых файлов сессий.

Также в крон добавил автоматическое удаление файлов сессий старше одного часа, чтобы проблема больше не повторилась.

И перешел к основной проблеме — очистке жесткого диска.

Попробовал решение «в лоб»:

rm -rf ./*

Сервер повис, ничего не удалилось

Попробовал известный способ для удаления большого числа файлов

find . -type f -exec rm -v <> \;

Ничего, сервер виснет, файлы не удаляются.

А теперь что самое интересное — файловый менеджер mc достаточно успешно справлялся с задачей удаления этих файлов! То есть, когда запускаешь удаление папки — файлы удаляются, mc не виснет. Удаление идет со скоростью примерно 5 000 файлов в минуту, правда при этом создается огромная нагрузка на жесткий диск, что приводит к неработоспособности сервера.

А хотелось бы, чтобы эти файлы постепенно удалялись в фоновом режиме, и не мешали нормальной работе сайта.

Собственно, решение опять нашлось в гугле — Olark делится способом, как он отобразил список из 8 миллионов файлов в 1 папке, используя системный вызов getdents

Здесь находится документация по функции getdents, а также пример кода, который ее использует.

Правда, этот пример мне не совсем подошел — даже если ставить большой размер буфера, как советует Olark в своем блоге, все равно сервер виснет при попытке прочитать всю папку разом.

Опытным путем подобрал размер буфера в 30 килобайт, который позволяет считать около 550 названий файлов из директории, при этом не подвешивая сервер и не создавая излишней нагрузки на диск. А также немного переписал код примера, чтобы вместо отображения имени файла он его удалял.

В итоге у меня получился такой код:

#define _GNU_SOURCE #include /* Defines DT_* constants */ #include #include #include #include #include #include #define handle_error(msg) \ do < perror(msg); exit(EXIT_FAILURE); >while (0) struct linux_dirent < long d_ino; off_t d_off; unsigned short d_reclen; char d_name[]; >; #define BUF_SIZE 1024*30 int main(int argc, char *argv[]) < int fd, nread; char buf[BUF_SIZE]; struct linux_dirent *d; int bpos; int deleted; char d_type; char temp[100]; fd = open(argc >1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY); if (fd == -1) handle_error("open"); deleted = 0; nread = syscall(SYS_getdents, fd, buf, BUF_SIZE); if (nread == -1) handle_error("getdents"); if (nread != 0) < for (bpos = 0; bpos < nread;) < d = (struct linux_dirent *) (buf + bpos); d_type = *(buf + bpos + d->d_reclen - 1); if(d->d_ino && d->d_ino != 22332748 && d->d_ino != 22332761) < // тут я прописал inode самой директории и директории верхнего уровня, чтобы он не пытался удалять файлы "." и ".." - принимаю подсказки, как это сделать лучше sprintf(temp,"%s/%s", argv[1], (char *) d->d_name); remove(temp); deleted += 1; > bpos += d->d_reclen; > > printf("deleted %d\n", deleted); exit(EXIT_SUCCESS); > 

Код компиллируется обычным gcc

gcc listdir.c -o listdir

И просто запускается из командной строки:

./listdir mod-tmp2

Получившийся файл я поставил в крон и теперь у меня удаляется по 547 файлов в минуту, при этом нагрузка на сервер в пределах нормы — и я надеюсь, в течение недели-другой все файлы все-таки удалятся.

Выводы
  1. Если df -h показывает, что на жестком диске еще есть место — его может и не быть. Надо смотреть также df -i
  2. Не стоит надеяться на механизмы авто-очистки таких вещей, как файлы сессий — в какой-то момент они могут не сработать, и вы окажетесь у целой горы файлов, удалить которые — задача нетривиальная
  3. Стандартные команды линукс, такие как ls, rm, find и т.д. могут пасовать перед нестандартными ситуациями вроде миллионов файлов в одной папке. В таком случае надо использовать низкоуровневые системные вызовы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *