Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

Мониторинг папки: помогите с алгоритмом.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
3-10098
Spawn
2003-07-13 07:38
2003.08.04
Не могу вносить данные в НД


8-10306
_PG_gaws
2003-04-09 18:01
2003.08.04
Могу ли я использовать стандартные компоненты c DelpiX


1-10255
PrettyFly
2003-07-20 13:22
2003.08.04
Framы - диверсанты ;-)


14-10457
Mike_Goblin
2003-07-18 15:26
2003.08.04
Сладкое слово - отпуск


3-10138
Иванов Сергей
2003-07-14 17:43
2003.08.04
IB подвисает