VB6, Файл не Существует, Как я обрабатываю Корректно?

Предполагая, что вход DF воспроизводимо показан в примечании в конце:

min.max <- do.call("rbind", by(DF[-1], DF[[1]], range, na.rm = TRUE))
colnames(min.max) <- c("min", "max")
min.max

дает эту матрицу:

  min max
A   2  13
B   1  17

Примечание

Lines <- "
A       5     9     2     6
A       13    8     
A       4     8     3     10    6
B       12    5     11     
B       7     1     17    6     8     1"
DF <- read.table(text = Lines, as.is = TRUE, fill = TRUE)
names(DF)[1] <- "Class"
5
задан Charlie White 14 October 2008 в 20:25
поделиться

6 ответов

К сожалению, VB не делает это легким, но к счастью API Win32 делает, и довольно просто вызвать функции Win32 из VB.

Для LAN/WAN можно использовать комбинацию следующих вызовов API Win32, чтобы сказать Вам, существует ли удаленное соединение, не имея необходимость иметь дело с сетевым тайм-аутом:

Private Declare Function WNetGetConnection Lib "mpr.dll" Alias _
    "WNetGetConnectionA" (ByVal lpszLocalName As String, _
    ByVal lpszRemoteName As String, ByRef cbRemoteName As Long) As Long

Private Declare Function PathIsNetworkPath Lib "shlwapi.dll" Alias _
    "PathIsNetworkPathA" (ByVal pszPath As String) As Long

Private Declare Function PathIsUNC Lib "shlwapi.dll" Alias "PathIsUNCA" _
    (ByVal pszPath As String) As Long

Для Интернета можно использовать вызов API Win32:

Private Declare Function InternetGetConnectedState Lib "wininet.dll" _
    (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long

Const INTERNET_CONNECTION_MODEM = 1
Const INTERNET_CONNECTION_LAN = 2
Const INTERNET_CONNECTION_PROXY = 4
Const INTERNET_CONNECTION_MODEM_BUSY = 8

Этот сайт VB имеет больше обсуждения ориентированных функций пути, которые можно вызвать в API Win32 через VB.

6
ответ дан 14 December 2019 в 19:30
поделиться

Я не уверен, что можно обработать это намного более корректно - если сеть имеет проблемы, она может требовать времени для тайм-аутов, чтобы указать, что проблема достаточно серьезна, что вещи не работают.

Если поточная обработка поддержек VB6 (я честно не вспоминаю), Вы могли бы вращать файл, открытый в фоновый поток, и иметь UI, позволяют пользователю отменять его (или выполнить другие операции, если это имеет смысл), но это представляет довольно существенное количество дополнительной сложности.

0
ответ дан 14 December 2019 в 19:30
поделиться

VB6 имеет некоторые сетевые функции, которые могут протестировать, чтобы видеть, соединена ли сеть. Необходимо смочь включить под 'Ссылками' 'библиотеку типов NetCon 1.0 '. Это добавляет для Вас NETCONLib. После того, как реализованный, необходимо смочь протестировать на сетевое соединение сначала, затем протестировать на FileExists и GetAttr.

Сообщите мне, помогает ли это!

0
ответ дан 14 December 2019 в 19:30
поделиться

VB является по сути единственным, распараллелил, но можно отклонить работу к COM-компоненту, чтобы сделать асинхронную проверку файла и отметить событие, когда это сделано. Таким образом, поток UI остается в быстро реагирующем, по крайней мере. Проблема - это - вся теория, я не знаю такой компонент.

Но ожидайте! Google просто поднял это: Visual Basic 6 Асинхронный Файловый ввод-вывод Используя Платформу.NET. Это помогает, возможно?

Кроме того, у них есть что-то подобное в CodeProject: Асинхронная обработка - Основы и пошаговая демонстрация с VB6/VB.NET

0
ответ дан 14 December 2019 в 19:30
поделиться

Я соглашаюсь с Желанием. Что-то вроде этого просто обработать со Сценарием. FileSystemObject:

Dim objFSO As New FileSystemObject 
If objFSO.FileExists("C:\path\to\your_file.txt") Then
    ' Do some stuff with the file
Else
    ' File isn't here...be nice to the user.
EndIf
-1
ответ дан 14 December 2019 в 19:30
поделиться

Доступ к файлам по сети может вызвать, они зависают.

Это было некоторое время, но я помню многопоточность в VB6, являющемся относительно болезненным для реализации. Быстрое решение состояло бы в том, чтобы иметь маленький .exe (возможно, также кодированный в VB), который может обработать это. Вы могли использовать DDE для межсвязи приложений или очень легкого, но kludgey основанного на файле канала, которым я имею в виду файл, что оба приложения будут взаимно чтение-запись для обработки межсвязи приложений. Конечно, с помощью основанных на файле каналов, в зависимости от деталей этого сценария, может просто преувеличить задержку Файлового ввода-вывода.

Если существует разумный градус, с которым можно предсказать, где пользователь будет выбирать файлы из, можно рассмотреть заблаговременно кэширование списка каталогов и читая, что, а не файл непосредственно - принятие содержания каталога, как ожидают, не будет часто изменяться.Примечание: получение списка каталогов по сети вызовет те же проблемы задержки как отдельный файловый ввод-вывод по сети. Иметь это в виду.

-1
ответ дан 14 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: