Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 ??

Во первых:

Заранее размер файла не известен


Почему неизвестен?

  File1 = FreeFile
  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

Во-первых получить размер файла можно гораздо
проще...
n = FreeFile
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:

n = FreeFile
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-сайт: xury.zx6.ru
 Профиль | | #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
n = FreeFile
Open file$ for Input as #n:FileSize=LOF(n):Close #n

А не судбба написать FileLen(<имя_файла>;) ? :)

Ответить

Номер ответа: 14
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 14.09.05 09:55
ЗЫ
способы левые, но все же...

1. Посмотреть два раза размер файла с задержкой.
2. Возможно прокатит... Можно попробовать открыть файл с лагом DELETE в dwDesiredAccess параметре функции CreateFile. Ведь пока файл копируется, он занят и открыть файл с флажком удаления вряд-ли получится...

Ответить

Номер ответа: 15
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #15 Добавлено: 14.09.05 10:34
Есть приложение, которое по таймеру следит за определенным каталогом на наличие новых файлов.
Есть возможность здесь обойтись без таймера используя WMI (кстати должно работать под любой осью и отключенном сервисе WMI).Точно так же можно следить и за каталогом на сервере, если появился файл - копирование завершено (раньше он не появится).

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам