Страница: 1 | 2 |
Вопрос: Состояние файла
Добавлено: 13.09.05 18:37
Автор вопроса: LamerOnLine | ICQ: 334781088
Вопрос простой. Есть приложение, которое по таймеру следит за определенным каталогом на наличие новых файлов. При обнаружении файла запускается операция сегментированого чтения и сохранения на сервер. Заранее размер файла не известен.
При больших размерах файла и малом времени сканирования возможна ситуация когда файл еще находится в состоянии закачки. Обработка его, как следствие, будет ошибочной. Как узнать что операция копирования файла была завершена?
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
я забыл падписацца, асёл
Вопросов: 0
Ответов: 11
Профиль | | #1
Добавлено: 13.09.05 18:42
Может создать файл типа INI в котором до начала закачки ставится Ready=No а в конце Ready=Yes и скрипт проверяет это значение для каждого файла прежде чем начать обработку.
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 13.09.05 18:59
Не, файл пишется по сети, ручками. Тем же проводником. Какие тут ini...
Номер ответа: 3
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #3
Добавлено: 13.09.05 19:09
Действительно, какой iNi ??
Во первых:
Почему неизвестен?
Open "путь к файлу" Text For Binary As #File1
Label.Caption = LOF(1)
ReDim ByteArray(LOF(1) - 1)
Get #File1, , ByteArray()
Close #File1
Известен.
Во вторых:
Напиши обработчик..
Например IF:
Если новый файл пишется, то ...
Если файл записан, то ...
зы - начайльный размер файла уже известен, теперь не составляет труда написать обработчик.
_________________________________________________
Встречают по нику, проважают по IP
Номер ответа: 4
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #4
Добавлено: 13.09.05 19:59
Чуть не забыл
Тут оператор If не сильно подойдет,
лутше воспользуйся While ...
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 13.09.05 23:43
VB Lamer
Во-первых получить размер файла можно гораздо
проще...
Open file$ for Input as #n:FileSize=LOF(n):Close #n
Во-вторых, таким макаром ты получишь размер даже недокачанного файла, а LOL'у надо знать когда файл полностью докачен, т.к. он потом чё то там с ним делает...
2LOL
Попробуй таймером получать размер файла, таймер интервалом например в 1 сек, и если прошлый размер файла равен текущему - мотай счётчик, если он > 5 (размер файла не менялся 5 сек) тогда скорее всего файл никто не трогает и он докачен. Своебразный таймаут... Ещё вариант смотреть окна с заголовком "Копирование"... но файл как я понял могут копировать чем угодно, так что первый вариант более подходящий.
Номер ответа: 6
Автор ответа:
E-Man
Вопросов: 3
Ответов: 132
Профиль | | #6
Добавлено: 14.09.05 00:38
если файл все еще копируется - он открыт на запись. пошевели его - если он уже открыт, будет ошибка..
Номер ответа: 7
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #7
Добавлено: 14.09.05 00:45
2HACKER:
Open file$ for Input as #n:FileSize=LOF(n):Close #n
Спасибо, а я мучаюсь постоянно, выписываю
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 14.09.05 01:19
открыт же не в твоей программе, т.е. наверно откроется...
Номер ответа: 9
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #9
Добавлено: 14.09.05 01:26
ЛОЛ: Всё таки мне кажется, тебе надо создавать своё клиентское приложение по выгрузке-будет надёжнее
Номер ответа: 10
Автор ответа:
E-Man
Вопросов: 3
Ответов: 132
Профиль | | #10
Добавлено: 14.09.05 01:29
а кто сказал открывать?
переименовать.. и ось не даст, если он в данный момент пишется.
Номер ответа: 11
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #11
Добавлено: 14.09.05 03:00
Абсолютно согласен с E-Man'ом.
Номер ответа: 12
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #12
Добавлено: 14.09.05 03:17
вообще да, переименовать не даст...
Номер ответа: 13
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #13
Добавлено: 14.09.05 07:42
Open file$ for Input as #n:FileSize=LOF(n):Close #n
А не судбба написать FileLen(<имя_файла> ?
Номер ответа: 14
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #14
Добавлено: 14.09.05 09:55
ЗЫ
способы левые, но все же...
1. Посмотреть два раза размер файла с задержкой.
2. Возможно прокатит... Можно попробовать открыть файл с лагом DELETE в dwDesiredAccess параметре функции CreateFile. Ведь пока файл копируется, он занят и открыть файл с флажком удаления вряд-ли получится...
Номер ответа: 15
Автор ответа:
AndreyMp
ICQ: 237822510
Вопросов: 28
Ответов: 1182
Профиль | | #15
Добавлено: 14.09.05 10:34