Захват файла Java в сети

Я полагаю, что вы используете VB.net. Если да, то это то, что вы пытаетесь?

Public Class Form1
    '~~> Adding sample items for demonstration purpose
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With ListBox2.Items
            .Add ("Vehicle-Vehicle")
            .Add ("Sid")
            .Add ("Vehicle-Pedestrian")
            .Add ("Sid")
            .Add ("Vehicle-Bicycle/Others")
            .Add ("Sid")
            .Add ("Vehicle-Animal")
        End With
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim coa As String = ""
        Dim displayar As String = ""

        '~~> Loop though selected items of the listbox
        For i As Integer = 0 To ListBox2.SelectedItems.Count - 1
            coa = coa & "," & ListBox2.SelectedItems(i)
        Next i

        '~~> Check if there is something or not in coa
        If String.IsNullOrEmpty(coa) Then
            displayar = 99
        Else
            Dim arr = Split(coa, ",")
            Dim arrv() As String
            ReDim arrv(UBound(arr))
            Dim n As Integer = 0

            '~~> Loop though the array and check it's values
            For i As Integer = 0 To UBound(arr)
                Select Case arr(i)
                    Case "Vehicle-Vehicle": arrv(n) = 1
                    Case "Vehicle-Pedestrian": arrv(n) = 2
                    Case "Vehicle-Bicycle/Others": arrv(n) = 3
                    Case "Vehicle-Animal": arrv(n) = 4
                    Case Else: arrv(n) = 99
                End Select
                n += 1
            Next i

            '~~> Get the complete string without looping
            displayar = Join(arrv, ",")
        End If

        MessageBox.Show (displayar)
    End Sub
End Class

Если я выберу все элементы, то результат будет 99,1,99,2,99,3,99,4, а если я ничего не выберу, то будет 99 [ 114]

11
задан Miles D 6 January 2009 в 12:08
поделиться

3 ответа

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

6
ответ дан 3 December 2019 в 08:31
поделиться

У Вас может быть пустой файл, который лежит на сервере, в который Вы хотите записать.

Когда Вы хотите записать в сервер, можно поймать маркер. Только, когда у Вас есть маркер, необходимо записать в любой файл, который лежит на сервере.

Когда Вы готовы с Вами, операции файла или исключение были брошены, необходимо выпустить маркер.

Класс помощника может быть похожим

private FileLock lock;

private File tokenFile;

public SLTokenLock(String serverDirectory) {
    String tokenFilePath = serverDirectory + File.separator + TOKEN_FILE;
    tokenFile = new File(tokenFilePath);
}

public void catchCommitToken() throws TokenException {
    RandomAccessFile raf;
    try {
        raf = new RandomAccessFile(tokenFile, "rw"); //$NON-NLS-1$
        FileChannel channel = raf.getChannel();
        lock = channel.tryLock();

        if (lock == null) {
            throw new TokenException(CANT_CATCH_TOKEN);
        }
    } catch (Exception e) {
        throw new TokenException(CANT_CATCH_TOKEN, e);
    }
}

public void releaseCommitToken() throws TokenException {
    try {
        if (lock != null && lock.isValid()) {
            lock.release();
        }
    } catch (Exception e) {
        throw new TokenException(CANT_RELEASE_TOKEN, e);
    }
}

Ваши операции затем должны быть похожими

try {
        token.catchCommitToken();

        // WRITE or READ to files inside the directory
    } finally {
        token.releaseCommitToken();
    }
3
ответ дан 3 December 2019 в 08:31
поделиться

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

Оборотная сторона - то, что сокрытие и/или переименование без дополнительного IO могут потребовать, чтобы Вы использовали собственные команды ОС, но процедура, чтобы сделать так должна быть довольно проста и детерминирована.

1
ответ дан 3 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

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