Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизМониторинг папки: помогите с алгоритмом. Найти похожие ветки
← →
Zn (2003-07-21 14:27) [0]Добрый день! Задача такая: нужна несложная программа мониторинга размера папки. Если размер папки превышает некоторую величину, то удаляются файлы самые старые до тех пор пока размер папки не станет приемлемым - в общем, по классике.
У меня 2 идеи:
1)вычисляется, сколько байтов необходимо удалить,
все файли загоняются в массив TSearchRec, массив сортируется по дате, и самые старые удаляются (на нужную сумму). Проблемма - нужно создавать динамический массив - довольно большой.
2)вычисляется, сколько байтов необходимо удалить, затем ищется самый старый файл, удаляется, затем снова, пока не придём к нужной сумме.
Подскажите, какой из алгоритмов более быстродействующий?
Или можно ещё как-то?
← →
Sandman25 (2003-07-21 15:10) [1]Модифицированный 1. Можно попробовать выполнить что-то типа "dir /od > file.tmp", чтобы получить список файлов, упорядоченный по дате. Потом считывать из файла file.tmp построчно и удалять.
← →
NickBat (2003-07-21 15:13) [2]Самый старый файл может оказаться самым ценным.
← →
Zn (2003-07-21 15:57) [3]
> Sandman25 © (21.07.03 15:10)
"dir /od > file.tmp" не подходит, потому что имеется много подкаталогов.
Нужно искать самый старый файл во всём каталоге, включая подкаталоги.
Вообще ситуация такая: организация очень большая, каждому отделу выделена папка на сервере для обмена информацией между пользователями и отделами. Внутри этих папок у пользователей есть свои папки. Информация это временная, актуальна в течение нескольких дней или недель. Но пользователи забывают удалять старые файлы и папки отделов разрастаются неимоверно. Вот для этого и нужна программа.
← →
Smithson (2003-07-21 16:06) [4]Квоту им поставь - вспомнят удалять. Увеличение квоты - через служебную записку, сроком на 3 дня (или менее). У меня так очень помогло - с 5 Гиг до 100 Мег ужались на раз.
← →
Zn (2003-07-21 16:12) [5]
> Smithson © (21.07.03 16:06)
Вообще-то был бы признателен за ссылку, где можно скачать такой менеджер, который устанавливал бы квоту для Windows NT 4.0.
← →
NickBat (2003-07-21 16:17) [6]Когда у меня стояла такая проблема, административным путем вводились квоты. Если их ящик забивался. Они не могли ничего нового записать и сами чистили все лишнее.
← →
Zn (2003-07-21 16:22) [7]
> NickBat © (21.07.03 16:17)
Так как установить квоту под NT 4.0?
← →
Sandman25 (2003-07-21 16:48) [8]Мой компьютер. Правая кнопка на соответсвтующем диске. Свойства. Квоты (самая правая закладка).
PS. Правда, это под win2000. Под NT может быть аналогично.
← →
Zn (2003-07-21 17:09) [9]
> Sandman25 © (21.07.03 16:48)
В том-то и дело, что под NT 4.0 нет квоты. Нужен какой-нибудь DiskManager.
← →
Sandman25 (2003-07-21 17:13) [10]Zn (21.07.03 17:09)
Тогда я пас. Извините :)
← →
Immortal_Death (2003-07-21 17:19) [11]Zn, а файловая система какая?, точнее какая версия НТФС-ки?
← →
Zn (2003-07-21 17:20) [12]
> Sandman25 © (21.07.03 17:13)
Ну, а по поводу 1-го вопроса: всё-таки, что быстрее - создать динамический массив, сортировать его и удалять файлы или искать старейшие и удалять? Всё-таки, динамическое выделение памяти делается медленно, да и сам массив тянет ресурсы, сортировка к тому же.
← →
Sandman25 (2003-07-21 17:27) [13]По сути, оба метода идентичны. Чтобы во втором случае найти самый старый файл, придется считать все файлы и отсортировать их.
Попробуйте TStringList (в качестве строки используйте дата+имя файла через конкатенацию), у него и метод Sort есть. Для вытаскивания имени файла можно будет брать остаток строки после 11 символа.
← →
Zn (2003-07-21 17:39) [14]
> Immortal_Death (21.07.03 17:19)
А как узнать, какая версия? Я порылся и не нашёл, чтобы это где-то указывалось. NT 4.0 ServicePack 4, а больше сказать не могу.
> Sandman25 © (21.07.03 17:27)
Насчёт TStringList - это идея. Спасибо!
← →
Плохиш (2003-07-21 17:56) [15]Для TStringList
listXXX.Values[FormatDateTime("yyyymmdd", FileDate)] := FileName;
← →
Zn (2003-07-21 18:10) [16]
> Плохиш (21.07.03 17:56)
Т.е. строки создавать в виде
20030721=C:\temp\test.txt ?
Или я не понял?
← →
Zn (2003-07-21 18:29) [17]И ещё вопрос в тему. напрмер число файлов в папка, включая вложенные, я вычисляю так:
function CountOfFiles(Foldername: string): Longword;
var SearchRec : TSearchRec;
begin
Result:=0;
if Foldername[Length(Foldername)] <> "\" then Foldername := Foldername + "\";
if FindFirst(Foldername+"*.*", faAnyFile, SearchRec) = 0 then
begin
repeat
if (SearchRec.Attr and faDirectory) <> faDirectory then
Result:=Result+1
else if (SearchRec.Name <> "..") and (SearchRec.Name <> ".") then
begin
Result:=Result+CountOfFiles(Foldername+SearchRec.Name);
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Как теперь подключить сюда массив type T1=array of TSearchRec, чтобы загнать в массив данные о файлах. У меня трудность с рекурсивным вызовом. Т.е. в корневой папке без проблем, а во вложенной - как додать к существующему массиву новые елементы с данными о файлах из подкаталогов? Я ясно выразился?
← →
Плохиш (2003-07-21 18:59) [18]> Zn (21.07.03 18:10)
Понял, понял, только Delphi за тебя всё сама создаст и обработает
← →
Плохиш (2003-07-21 19:03) [19]> Zn (21.07.03 18:29)
Что совсем память девать некуда?
Чем тебе TStringList не угодил?
← →
Zn (2003-07-21 19:19) [20]
> Чем тебе TStringList не угодил?
Да это я так, из чистого интереса.
← →
panov (2003-07-21 19:22) [21]а что за жуткий способ работать со списком файлов как с array of TSearchRec? Для чего?
← →
Плохиш (2003-07-21 19:24) [22]Кстати у TStringList ещё Objects есть.
Почитай справку, много интересного узнаешь.
← →
Zn (2003-07-22 10:14) [23]
> а что за жуткий способ работать со списком файлов как с
> array of TSearchRec? Для чего?
А чем плохо? Информация обо всех файлах каталога в одном массиве.
Но я остановился на TStringList. По-моему, это самый оптимальный вариант.
← →
Anatoly Podgoretsky (2003-07-22 10:23) [24]Zn (21.07.03 15:57)
В свете этого ничего считать и хранить не надо, просто в проходе по диску удалять все что сташне на Н дней.
Процесс хранения во временныйх папках должен быль регламентирован административным путем, у меня например один день (квота в 1 день) и в три часа ночи все файлы просто удаляются.
Размер папок на начало рабочего дня 0 байт.
← →
Zn (2003-07-22 10:44) [25]
> Anatoly Podgoretsky © (22.07.03 10:23)
Мы раньше тоже так делали, но это создаёт некоторые неудобства. Скажем, некоторая информация актуальна в течение недели. Пользователи то в командировке, то ещё где-то, одни приходят, другие уходят. Каждый день копировать файлы во временный каталог для ознакомления других облом. А если отдел следит за размером папки, сам её администрирует, то пусть там хранятся файлы хоть 10-летней давности.
← →
Immortal_Death (2003-07-22 10:50) [26]Zn,
если я правельно помню, файловые квоты начинаються с NTFS 5, поэтому, в 4 паке, ты не чего найти и не можешь...
(хотя за эту инфу не ручусь :)).
← →
Zn (2003-07-22 11:13) [27]
> Immortal_Death © (22.07.03 10:50)
Верно, я по другим каналам узнал, что в 4-м паке такого нет. Но утилита для таких целей существует, только никак не можем найти.
← →
Anatoly Podgoretsky (2003-07-22 11:19) [28]Zn (22.07.03 10:44)
Это чисто административный вопрос, но использовать обменные папки как рабочии в принцепе не правильно.
Утилиты есть от посторонних производителей.
← →
Zn (2003-07-22 11:36) [29]
> Anatoly Podgoretsky © (22.07.03 11:19)
Вижу, у всех одинаковые проблеммы. Помню, было много обид, когда в одно прекрасное утро пользователи увидели обменные папки пустыми. Хотя их неоднократно предупреждали, что эти папки только для обмена.
Ну да ладно, в принципе, прога почти закончена, так что вопрос решён.
Спасибо всем!
← →
3APA3A (2003-07-22 14:14) [30]"Но утилита для таких целей существует, только никак не можем найти."
Да, но в 5 версии NTFS квотирование поддерживается на уровне файловой системы, а в этих сторонних утилитах для NTFS 4 принцип действия такой-же - мониторит операции с файловой и если превысил лимит - ругается... Да и вообще, по такому принципу в любой файловой системе можно, не только в NTFS
← →
Anatoly Podgoretsky (2003-07-22 14:22) [31]Zn (22.07.03 11:36)
Такое было, но и решалось просто, было сказано, что нельзя использовать для работы и только в пределах суток.
Кроме того кое кого наказали, за использование обменных папок для передачи конфиденциальной информации, есть же электронная почта, в конце концов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c