Узнать, что файл используется

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Узнать, что файл используется

Сообщение Alexanbar » 22.09.2006 (Пт) 19:11

Задача такова. Создаю список файлов на удаление для ShFileoperation.

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

Напрашивается такой вариант решения.
При создании списка заранее не помещать файл, который используется. Вот только как это узнать? ВЕдь его атрибуты, например, ничем не отличаются от атрибутов соседнего файла, который никем не используется. Чего у него ДРУГОЕ? Как это распознать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.09.2006 (Пт) 19:20

Есть в принципе разница между файлами открытыми с номером 1-511 и 512 - ...

Думаю, это можно как то использовать.

Ну или же можно ковырять хэндлы и смотреть, кто кого использует.

ЗЫ. Писал особенно не думая, не пинайте...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 22.09.2006 (Пт) 19:42

Alexanbar
Ты ведь вкурсе, что после того как ты сформируеш список, и начнеш SHFileOperation ктото может занять файл и все равно будет "действие ShFileoperation прекращается"
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 22.09.2006 (Пт) 21:02

Дело в следующем. Очень часто приходится чистить временные файлы в папках Temp. Всего 2-3 из них - заняты. Однако, из за них приходится операцию повторять, снимая с них выделение вручную.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 22.09.2006 (Пт) 22:39

А может просто батник с
Код: Выделить всё
del *.*
?
Если всё делать своими ручками, они скоро отвалятся !

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 22.09.2006 (Пт) 23:39

Kovu писал(а):А может просто батник с
Код: Выделить всё
del *.*
?


НЕт. Во-первых, удаляется не всё подряд, а выделенное вручную
Во-вторых, нужен прогресс операции.
Всё это есть в Shfileoperation.
Одно плохо. ПРи малейшей ошибке (например, если файл нельзя удалить) операция прекращается, а я хочу, чтобы продолжалась, и удалялось то, что можно удалить. Естественно, с выводом сообщения, что некоторые файлы удалить не удалось.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 23.09.2006 (Сб) 0:01

значит руками, т.к. Shfileoperation не поддерживает требуемой функциональности ?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 23.09.2006 (Сб) 0:11

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 23.09.2006 (Сб) 13:37

Код: Выделить всё
Function IsFileUsed(ByVal sFileName As string) as boolean
On error Goto Eh
r$ = Hex(Timer*1000) + Oct(int(rnd * 20000))
Name sFileName As sFileName + r$
Name sFileName + r$ as sFileName
EH:
IsFileUsed= ( Err.Number = 70 )
End Function


но не думаю что это удачное решение. Тогда уж проще удалять самому.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 135

    TopList