Я полагаю, что вы используете 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]
Это не может быть надежно сделано в сетевой файловой системе. Пока Ваше приложение является единственным приложением, которое получает доступ к файлу, лучше реализовывать некоторый совместный процесс блокировки (возможно, пишущий файл блокировки в сетевую файловую систему, когда Вы открываете файл). Причина, которая не рекомендуется, однако, состоит в том, что, если Ваши катастрофические отказы процесса или сеть понижается или любое другое количество проблем происходит, Ваше приложение входит в противное, грязное состояние.
У Вас может быть пустой файл, который лежит на сервере, в который Вы хотите записать.
Когда Вы хотите записать в сервер, можно поймать маркер. Только, когда у Вас есть маркер, необходимо записать в любой файл, который лежит на сервере.
Когда Вы готовы с Вами, операции файла или исключение были брошены, необходимо выпустить маркер.
Класс помощника может быть похожим
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();
}
Вместо того, чтобы реализовывать стратегию блокировки, которая будет, по всей вероятности, полагаться на читателей для соблюдения конвенции, но не вынудит их к, возможно, можно выписать файл в скрытый или неясно именованный файл, где это будет эффективно невидимо для читателей. Когда операция записи будет завершена, переименуйте файл к ожидаемому общедоступному имени.
Оборотная сторона - то, что сокрытие и/или переименование без дополнительного IO могут потребовать, чтобы Вы использовали собственные команды ОС, но процедура, чтобы сделать так должна быть довольно проста и детерминирована.