Вверх ↑
Этот топик читают: Гость
Ответов: 817
Рейтинг: 52
#1: 2007-07-13 21:01:35 ЛС | профиль | цитата
Приятного времени суток господа!

Хочу сделать что то навроде клинера для личного пользования, но вот встает вопрос.
Сделал так, что программа ищет все интересующие меня файлы и удаляет их сразу же, но если
какой то файл открыт и используется, то выдается ошибка что нельзя удалить и останавливается.
Как можно исключить эту ошибку и если файл используется, то пускай его пропустит и работает дальше? Наброски можно посмотреть чуть ниже

Заранее всем спасибо
code_1673.txt

P.S.
И в догонку.
Как можно сделать поиск нескольких файлов сразу?
Вот например надо мне найти и удалить *.xxx; *.yyy; *.zzz
Сейчас вижу решение только в тройном проходе. Сначало найти и удалить *.xxx, потом *.yyy и т.д.
А хотелось бы за один проход.

Еще раз спасибо большое всем за участие
карма: 1

0
файлы: 1code_1673.txt [840B] [240]
Ответов: 3851
Рейтинг: 159
#2: 2007-07-13 22:29:23 ЛС | профиль | цитата
-= DriveR =- писал(а):
Как можно сделать поиск нескольких файлов сразу

сделай "несколько" проверок по onSearch
карма: 0
начавший
0
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2007-07-13 22:35:02 ЛС | профиль | цитата
-= DriveR =- писал(а):
Как можно исключить эту ошибку и если файл используется, то пускай его пропустит и работает дальше?

использовать FileOperation

-= DriveR =- писал(а):
Как можно сделать поиск нескольких файлов сразу?

ищем все файлы по маске *.*, далее компонентом FileParts извлекаем расширение и сравниваем с нужными.

[size=-2]------ Добавлено в 22:35
сравнивать можно например поиском расширения в строке .xxx;.yyy;.zzz. Если поиск вернул позицию больше нуля, то расширение подходит
карма: 27
0
Ответов: 1305
Рейтинг: 29
#4: 2007-07-13 23:11:27 ЛС | профиль | цитата
Dilma писал(а):
сравнивать можно например поиском расширения в строке .xxx;.yyy;.zzz. Если поиск вернул позицию больше нуля, то расширение подходит

И удалит файл file.abcd вместе со всеми *.abc

Лучше уж первый способ
Dilma писал(а):
далее компонентом FileParts извлекаем расширение и сравниваем с нужными

Add(FileSearch,16558719,133,154)
{
link(onSearch,7346097:doEvent1,[])
}
Add(FilePart,8533603,238,161)
{
link(onExt,6722957:doCompare,[])
}
Add(If_else,6722957,294,175)
{
Op2=String(.xxx)
link(onTrue,11707598:doWork2,[(441,181)])
link(onFalse,4658780:doCompare,[(341,188)(341,209)])
}
Add(FileTools,5937669,518,161)
{
link(FileName,4479001:Value,[])
}
Add(If_else,4658780,357,203)
{
Op2=String(.yyy)
link(onTrue,13242493:doWork2,[(469,209)])
link(onFalse,9566621:doCompare,[(408,216)(408,230)])
}
Add(HubEx,11707598,497,168)
{
link(onEvent,5937669:doDelete,[])
}
Add(If_else,9566621,427,224)
{
Op2=String(.zzz)
link(onTrue,13242493:doWork3,[(473,230)])
}
Add(HubEx,13242493,469,196)
{
link(onEvent,11707598:doWork3,[(501,209)])
}
Add(Memory,4479001,518,98)
{
}
Add(Hub,7346097,182,154)
{
link(onEvent1,4479001:doValue,[(227,160)(227,104)])
link(onEvent2,8533603:doPart,[])
}
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#5: 2007-07-13 23:49:05 ЛС | профиль | цитата
v258, конкретная реализация зависит от конкретной задачи. Я же привел только идею. Скажем ситуация с 4х буквенными расширениями разрешается путем прибавки в конец расширения найденного файла символа ";" все с тем же поиском по одной строке.
карма: 27
0
Ответов: 817
Рейтинг: 52
#6: 2007-07-14 09:17:09 ЛС | профиль | цитата
2 Dilma


-= DriveR =- писал(а)
Как можно исключить эту ошибку и если файл используется, то пускай его пропустит и работает дальше?

использовать FileOperation


Такого компонента не нашел, зато нашел FileTools (Файловые операции)
Но он не позволяет отключить ошибку, или я не туда посмотрел ?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#7: 2007-07-14 09:30:09 ЛС | профиль | цитата
Используй FileSearch.doSearch с маской *.*
По onSearch проверяй чего хочешь, холь левой ногой ухо чеши
Например FileTools.doFileExists
По результатам - удаляй через тот же FileTools
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#8: 2007-07-14 10:06:07 ЛС | профиль | цитата
-= DriveR =- писал(а):
Как можно исключить эту ошибку и если файл используется, то пускай его пропустит и работает дальше?
Проверять "использование" файла перед подачей команды на удаление.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 817
Рейтинг: 52
#9: 2007-07-14 10:33:21 ЛС | профиль | цитата

Проверять "использование" файла перед подачей команды на удаление.

А можно немного поподробнее и если не сложно с примером
с поиском я вроде разобрался
карма: 1

0
Ответов: 1305
Рейтинг: 29
#10: 2007-07-14 11:06:13 ЛС | профиль | цитата
Dilma писал(а):
конкретная реализация зависит от конкретной задачи. Я же привел только идею. Скажем ситуация с 4х буквенными расширениями разрешается путем прибавки в конец расширения найденного файла символа ";" все с тем же поиском по одной строке

По моему, это усложнение простой задачи. Тем более, что никогда нельзя быть уверенным, с чем эта прога может столкнуться в реальной обстановке. Скажем, откуда человек мог бы знать года два назад, что новый Ворд будет сохранять свои документы с расширением .docx.

Конечно, это мое сугубое имхо, но когда работаешь с файлами и их расширениями, нужна не приблизительность, а точное указание, чего ты от проги хочешь. Чтобы потом не было мучительно больно
карма: 0

0
Ответов: 817
Рейтинг: 52
#11: 2007-07-14 12:24:41 ЛС | профиль | цитата
Во, во!
Именно этот docx меня и вынудил эту программку писать.
Господа, подскажите примером, как избавиться от появления ошибки и останова программы
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#12: 2007-07-14 12:37:17 ЛС | профиль | цитата
-= DriveR =-, например такая схема выдает размер равным 0 для всех файлов, занятых другими программами и недоступными на чтение:
Add(Message,7159410,252,203)
{
link(Message,15743582:Size,[(258,191)(234,191)(234,247)(209,247)])
}
Add(Button,6939461,140,203)
{
Left=45
Top=210
link(onClick,15743582:doOpen,[])
}
Add(FileStream,15743582,196,203)
{
link(onLoad,7159410:doMessage,[])
}
карма: 27
0
Ответов: 1305
Рейтинг: 29
#13: 2007-07-14 12:42:32 ЛС | профиль | цитата
-= DriveR =- писал(а):
подскажите примером, как избавиться от появления ошибки и останова программы

Возьми мой пример на прошлой странице и установи свойство DelToRecycle=False компонента FileTools. Будет удалять все файлы, пропуская занятые. По крайней мере у меня так получилось

[size=-2]------ Добавлено в 12:42
Dilma, а если файлы будут многие и многие мегабайты размером - не приведет ли это к ненужной загрузке памяти?
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#14: 2007-07-14 13:15:41 ЛС | профиль | цитата
Компонент только открывает файл на чтение и не грузит его целиком в память.
карма: 27
0
Ответов: 817
Рейтинг: 52
#15: 2007-07-14 14:52:20 ЛС | профиль | цитата
Не господа, не работает адская машина

code_1674.txt
Вот посмотрите.
Мои действия:
1. Создаю обычный тхт файл и переименовываю его на *.ххх
2. Создаю обычный doc файл и переименовываю его на *.xxx
3. Запускаю программу и она ругается что удалить нельзя, файл занят.
но на самом деле не занят.
Если в место компонента FileTools поставить DirTools, то получается тоже самое
Но если подставить message, то мы отчетливо видим что значение больше 0
т.е. файл не занят и не используется
карма: 1

0
файлы: 1code_1674.txt [1.4KB] [232]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)