Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-10452
мимо проходил
2003-07-18 13:48
2003.08.04
Узнай правду :))


6-10325
Евгения
2003-05-26 15:57
2003.08.04
FastNet - NMStrm


1-10280
Goblinus
2003-07-22 02:19
2003.08.04
Глюки TPanel


11-10152
Arioch
2002-12-03 15:10
2003.08.04
А будет ли Unicode ? (кто что думает по поводу?)


14-10425
Igor__
2003-07-17 17:10
2003.08.04
Как выбрать сканер и монитор????





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский