Страница: 1 |
Страница: 1 |
Вопрос: Проверка доступности файла
Добавлено: 29.12.07 04:08
Автор вопроса: Winand | Web-сайт:
Есть моторола в режиме сетевого устройства. Мне нужно скачать со нее некоторые файлы. Как проверить доступность узла (без длительных подвисаний) при помощи IcmpSendEcho я разобрался.
Но, как же проверить доступность файлов-то?! Потому что если на телефоне не запустить samba или чето в этом духе, то ip-шник телефона доступен, а файлы - нет. При этом нужно нечто типа таймаута, а то стандартная функция FileCopy очень долго думает прежде чем выдать ошибку.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 29.12.07 07:36
Попробуй асинхронный (overlapped) ввод/вывод
Номер ответа: 2
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #2
Добавлено: 29.12.07 12:27
ReadFile/WriteFile
Номер ответа: 3
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #3
Добавлено: 30.12.07 02:17
фигню какую-то нашел)) не понимаю многого. В CreateFile флаг только ОВЕРЛАП ставить?
Ovr.hEvent = CreateEvent(ByVal 0, 0, 0, ByVal 0)
hFile = CreateFile(sFile, GENERIC_READ, 0, ByVal 0&, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0) 'открываем файл для двоичного доступа получаем его манипулятор
ret = ReadFile(hFile, 0&, 1, 0&, Ovr)
If ret = 0 And Err.LastDllError <> 0 Then
If Err.LastDllError = 997 Then 'request pending
ret = WaitForSingleObject(Ovr.hEvent, 1000) 'second time-out
If ret = 0 Then ChkFileAvail = True
End If
End If
CloseHandle hFile
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 30.12.07 03:49
в топку эти оверлапти.. оно ж сигналит только в момент вызова WaitForSingleObject/WaitForMultipleObject.. оверлапти неработают в вин9598me.. оверлапти могут криво работать (или неработать вовосе) если читерить с приоритетами проги.. Вообщем абы не кривость потоков в вб - я бы делал через потоки Ну коль вб кривой с ними, я бы делал на С++ и вызывал из вб..
Впрочем и копирование файла немешало бы в отдельном потоке запустить, бо если файл станет недоступен на 50% копирования - ждать будут все долго Вообщем гнилая эта тема, лучше напицца.
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 30.12.07 13:43
Так. Стоп. Задача должна решаться проще наверняка.
1)Проверить доступность удаленного узла - сделано
2)Проверить доступность нескольких файлов на узле размером в несколько КБ
3)Скопировать файлы через FileCopy - понятно как
ВОПРОС: как выполнить п.2 с таймаутом 1 - 1.5 сек (ведь узел-то на самом деле не удаленный, а лежит на столе рядом
Номер ответа: 6
Автор ответа:
intel-DX
ICQ: 445091742
Вопросов: 4
Ответов: 169
Профиль | | #6
Добавлено: 30.12.07 16:42
HACKER я с Вами согласен на все 100%.
Особенно в последнем.
.::С Новым Годом::.
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 30.12.07 16:55
Если тебе не нравится OVERLAPPED, тогда юзай треды, действительно. В главном треде поставь паузу на 1.5 секунды, после чего, если результата нет, убивай второй тред. Не могу сказать с уверенностью, но таймауты (сетевые, ФС и все такое) хранятся в винде на уровне ядра.
Номер ответа: 8
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #8
Добавлено: 30.12.07 18:51
Но ведь в пингующей функции IcmpSendEcho просто ставится тайм-аут в качестве аргумента. И без всяких траблов..
Номер ответа: 9
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 01.01.08 00:26
Такова винда