Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему валится FileSystemObject при 5-6 обращении / 23 сообщений из 23, страница 1 из 1
28.07.2008, 20:41
    #35456450
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Доброго времени суток, товарищи

Подскажите пожалуйста почему валится след. кусок кода примерно на 5-6 обращении:
Код: plaintext
1.
2.
3.
4.
5.
Dim FileStr() As String 

    Set objTtxStrm = objFso.OpenTextFile(FileName, ForReading, False, TristateUseDefault)
    FileStr = Split(objTtxStrm.ReadAll, vbCrLf, , vbBinaryCompare)
    objTtxStrm.Close

Отмечу сразу что в массив зачитываются просто огроменные файлы логов. Вот и собственно как сделать так чтобы не валилось считывание инфы из логов в массив?

Спасибо.
...
Рейтинг: 0 / 0
28.07.2008, 20:45
    #35456454
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Код: plaintext
1.
2.
    ......
    objTtxStrm.Close
    objTtxStrm = Nothing
...
Рейтинг: 0 / 0
28.07.2008, 20:59
    #35456473
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
ох, так basic даже сплитовать массив отказался
...
Рейтинг: 0 / 0
29.07.2008, 07:23
    #35456717
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Kallandorогроменные файлы а какие они, огромные, случайно не более двух гиг
...
Рейтинг: 0 / 0
29.07.2008, 10:36
    #35457070
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Kallandor
Отмечу сразу что в массив зачитываются просто огроменные файлы логов. Вот и собственно как сделать так чтобы не валилось считывание инфы из логов в массив?

Читать их по частям.
...
Рейтинг: 0 / 0
29.07.2008, 11:18
    #35457206
Ashton_Guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Где-то в MSDN написано.

"For large files, using the ReadAll method wastes memory resources.
Other techniques should be used to input a file, such as reading a
file line by line."


Можно посоветовать читать файл частями с помощью метода ReadLine.
...
Рейтинг: 0 / 0
29.07.2008, 11:56
    #35457355
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
klen_ Kallandorогроменные файлы а какие они, огромные, случайно не более двух гиг

Я тренировалась на текстовом файле размером в 147 Мб, но в реальности должны подтягиваться файлы с размерами до 1,5 Гб


Собственно в соотв. с БОЛ я и использовала метод ReadAll - и он выполняется довольно-таки долго. А какие еще есть способы считывания больших массивов данных из файлов?
...
Рейтинг: 0 / 0
29.07.2008, 12:02
    #35457375
Toking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Попробуйте использовать ADODB.Stream ...
...
Рейтинг: 0 / 0
29.07.2008, 12:18
    #35457441
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
скажите, вот вы прочитали пару записей (допустим всего две)
что дальше будете делать?
какова, вообще, цель?
...
Рейтинг: 0 / 0
29.07.2008, 13:09
    #35457638
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
я к тому что можно так прочитать, и подобрать наибольшую скорость, подбирая размер masFile()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim masFile() As Byte
Open inpFile For Binary Access Read Lock Read As #inpFree
rSize = LOF(inpFree)
	
ReDim masFile(  0  To ? )

Do While rSize > ???
     Get #inpFree, , masFile()
     тут работаете с masFile()
Loop
	
Close #inpFree
...
Рейтинг: 0 / 0
29.07.2008, 14:05
    #35457873
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
klen_скажите, вот вы прочитали пару записей (допустим всего две)
что дальше будете делать?
какова, вообще, цель?

Цель просто поиск в большом текстовом файле определенного контекста и в зависимости от насторек выводить несколько строк до и после этой записи. Вывожу строчки я в TextBox собственно все. Можно еще контекст выделить цветом (но я не знаю как это делается). Самое интересное что должна выводиться вся строка и строчки до и после
...
Рейтинг: 0 / 0
29.07.2008, 14:06
    #35457879
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
klen_я к тому что можно так прочитать, и подобрать наибольшую скорость, подбирая размер masFile()


А какой размер лучше подбирать для ReadAll/ReadLine / Get ?
...
Рейтинг: 0 / 0
29.07.2008, 16:20
    #35458408
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
для случая Get = 1024 (длина массива)
а ReadAll или ReadLine, для больших файлов не использовал, да и аргументов там по моему нет
...
Рейтинг: 0 / 0
01.08.2008, 08:26
    #35464665
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Стараемся использовать переменные типа integer и byte, т.к. они самые быстрые.
Допустим надо найти "искомое слово" или "какое-нибудь предложение" длиной не более 32768 символов
Чем короче предложение, тем быстрее ищет.
Например фразу "искомое слово", в файле 100 МБ, которая находилась где-то в конце файла,
откомпилированный Project1.exe нашел за три секунды.
Код: plaintext
1.
2.
Private Sub Command1_Click()
    variant2 App.Path & "\file.log", "искомое слово"
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
Private Sub variant2(FileLog As String, FindWord As String)
Dim LenWord As Integer, KB As Integer, k2 As Integer, bt As Double
Dim masFind() As Byte
Dim masFile() As Byte
Dim rSize As Double, i As Integer, j As Integer, f As Integer, k As Integer, k1 As Byte

Dim time1 As String:                    time1 = Format(Time(), "Long Time")

For i =  1  To Len(FindWord)              'перевод искомого слова в массив кодов
    ReDim Preserve masFind( 0  To i -  1 )
    masFind(i -  1 ) = Asc(Mid(FindWord, i,  1 ))
Next
LenWord = UBound(masFind)

Dim inpFree As Integer
    inpFree = FreeFile

Open FileLog For Binary Access Read Lock Read As #inpFree

k1 =  0                                   'определимся, какими частями будем читать
bt =  0 
KB =  1024 
rSize = LOF(inpFree)
If rSize < KB Then
    KB = rSize
End If

Do While rSize > bt
    bt = bt + KB
    If k1 =  0  Then
        ReDim masFile( 0  To KB)
        k1 =  1                           'читаем первую часть
        k2 = KB
    Else
        ReDim Preserve masFile( 0  To (KB + KB))
        k1 =  0                           'читаем вторую часть сохраняя первую на тот случай,
        k2 = KB + KB                    'если искомое слово оказалось на стыке двух частей
    End If
    Get #inpFree, , masFile()
    
    f = - 1                               'обыкновенный поиск в массиве, "перебором"
    k = - 1 
    For i =  0  To LenWord
        For j = f +  1  To k2
            If masFind(i) = masFile(j) Then
                f = j
                k = k +  1 
                Exit For
            End If
        Next
        If f = - 1  Then Exit For
    Next
    If k = LenWord Then Exit Do
    
Loop
 
Close #inpFree

MsgBox time1 & vbCrLf & Format(Time(), "Long Time")

If k = LenWord Then                     'здесь что-нибудь сообщаем
    stroka = ""
    For i = f - k To f
        stroka = stroka + Chr(masFile(i))
    Next
    MsgBox stroka
Else
    MsgBox "не найдено"
End If

End Sub
хорошо бы, если б вы предложили свой варинт, именно поиска (а то мой делает много лишних сравнений)
или ещё лучше, указать на системную dll, (чтоб не изобретать велосипед)
...
Рейтинг: 0 / 0
04.08.2008, 15:17
    #35469108
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
klen_

При использовании вашего варианта vasic конечно быстро нашел, но вывел какие-то совершенно не понятные данные.

Мой вариант поиска:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Sub Select_SbStr_In_File(sel_str As String)
Dim i&, row_mass$

On Error GoTo Select_SbStr_In_FileErr

row_mass$ = ""
SizeAr =  0 
  
    If IsNew_file Then
        Fill_SbStr
        If result <>  0  Then
            Exit Sub
        End If
    End If

SizeAr = UBound(FileStr)

For i& =  0  To SizeAr
    If InStr( 1 , FileStr(i&), UCase(sel_str)) Then
        row_mass$ = row_mass$ + CStr(i&) + ","
    End If
Next i&

If Len(Trim(row_mass)) <>  0  Then
    FileRes = Split(row_mass, ",")
Else
    result =  1 
    ErrorMessage ""
    MsgBox "Заданный контекст в указанном файле не найден"
    Exit Sub
End If

result =  0 
Exit Sub

Select_SbStr_In_FileErr:
    result =  1 
    ErrorMessage "Ошибка при поиске контекста в заданном файле"
    Exit Sub
End Sub

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function IsNew_file() As Boolean

On Error GoTo IsNew_FileErr

IsNew_file = False

If Trim(FileName) <> Old_Filename Then IsNew_file = True

Exit Function

IsNew_FileErr:
    IsNew_file = False
    ErrorMessage "Ошибка при определении имени файла"
    Exit Function
End Function

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub Fill_SbStr()

Dim objFso As New FileSystemObject
Dim objTtxStrm As TextStream

On Error GoTo FillSbStrErr

    Set objTtxStrm = objFso.OpenTextFile(FileName, ForReading, False, TristateUseDefault)
    FileStr = Split(objTtxStrm.ReadAll, vbCrLf, , vbBinaryCompare)
    objTtxStrm.Close
    objTtxStrm = Nothing
    
    result =  0 
    Exit Sub

FillSbStrErr:
    result =  1 
    ErrorMessage "Ошибка при считывании лога в массив в заданном файле"
    Exit Sub
End Sub


Только у меня при чтении больших логов валится с ошибкой: Runtime error! abnormal program termination
...
Рейтинг: 0 / 0
05.08.2008, 07:20
    #35470117
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
этот вариант покажет всю строку в которой нашли искомое слово или фразу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
Private Sub variant2(FileLog As String, FindWord As String)
Dim LenWord As Integer, KB As Integer, k2 As Integer, bt As Double
Dim masFind() As Byte
Dim masFile() As Byte
Dim rSize As Double, i As Integer, j As Integer, f As Integer, k As Integer, k1 As Byte

For i =  1  To Len(FindWord)              'перевод искомого слова в массив кодов
    ReDim Preserve masFind( 0  To i -  1 )
    masFind(i -  1 ) = Asc(Mid(FindWord, i,  1 ))
Next
LenWord = UBound(masFind)

Dim inpFree As Integer
    inpFree = FreeFile

Open FileLog For Binary Access Read Lock Read As #inpFree

k1 =  0                                   'определимся, какими частями будем читать
bt =  0 
KB =  1024 
rSize = LOF(inpFree)
If rSize < KB Then
    KB = rSize
End If

Do While rSize > bt
    bt = bt + KB
    If k1 =  0  Then
        ReDim masFile( 0  To KB)
        k1 =  1                           'читаем первую часть
        k2 = KB
    Else
        ReDim Preserve masFile( 0  To (KB + KB))
        k1 =  0                           'читаем вторую часть сохраняя первую на тот случай,
        k2 = KB + KB                    'если искомое слово оказалось на стыке двух частей
    End If
    Get #inpFree, , masFile()
    
    f = - 1                               'обыкновенный поиск в массиве, "перебором"
    k = - 1 
    For i =  0  To LenWord
        For j = f +  1  To k2
            If masFind(i) = masFile(j) Then
                f = j
                k = k +  1 
                Exit For
            End If
        Next
        If f = - 1  Then Exit For
    Next
    If k = LenWord Then Exit Do
    
Loop
 
Close #inpFree

Dim LineBefore As String
Dim Line_After As String
Dim FindBefore As Integer

If k = LenWord Then
    LineBefore = ""                     'найдём строку от найденного, вверх по тексту
    FindBefore = - 1 
    For i = f - k To LBound(masFile) Step - 1 
        If masFile(i) =  13  Or masFile(i) =  10  Then
            FindBefore = i
            Exit For
        End If
    Next
    If FindBefore > - 1  Then
        For i = FindBefore +  1  To f - k -  1 
            LineBefore = LineBefore & Chr(masFile(i))
        Next
    End If
    Line_After = ""                     'найдём строку от найденного, вниз по тексту
    For i = f - k To UBound(masFile)
        If masFile(i) =  13  Or masFile(i) =  10  Then Exit For
        Line_After = Line_After & Chr(masFile(i))
    Next
    MsgBox LineBefore & Line_After
Else
    MsgBox "не найдено"
End If

End Sub
...
Рейтинг: 0 / 0
17.12.2008, 14:41
    #35720106
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
исправил ошибку в цикле чтения файла

начальная часть прежняя

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub variant2(FileLog As String, FindWord As String)
Dim LenWord As Integer, KB As Integer, k2 As Integer, bt As Double
Dim masFind() As Byte, masFile() As Byte
Dim rSize As Double, i As Integer, j As Integer, f As Integer, k As Integer, k1 As Byte

For i =  1  To Len(FindWord)              'перевод искомого слова в массив кодов
    ReDim Preserve masFind( 0  To i -  1 )
    masFind(i -  1 ) = Asc(Mid(FindWord, i,  1 ))
Next
LenWord = UBound(masFind)

Dim inpFree As Integer
    inpFree = FreeFile

Open FileLog For Binary Access Read Lock Read As #inpFree

k1 =  0                                   'определимся, какими частями будем читать
bt =  0 
KB =  1024 
rSize = LOF(inpFree)
If rSize < KB Then
    KB = rSize
End If

этот цикл исправил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Do While rSize > bt
    bt = bt + KB
    ReDim masFile( 0  To KB)
    Get #inpFree, , masFile()
    
    f = - 1                               'обыкновенный поиск в массиве, "перебором"
    k = - 1 
    For i =  0  To LenWord
        For j = f +  1  To KB
            If masFile(j) <>  13  And masFile(j) <>  10  Then 'пропускаем vbCrLf
                If masFind(i) = masFile(j) Then
                    f = j
                    k = k +  1 
                    Exit For
                End If
            Else
                If k < LenWord Then
                   k = - 1 
                End If
            End If
        Next
        If f = - 1  Then Exit For
    Next
    If k = LenWord Then Exit Do
Loop
Close #inpFree

конечная часть прежняя

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Dim LineBefore As String
Dim Line_After As String
Dim FindBefore As Integer

If k = LenWord Then
    LineBefore = ""                     'найдём строку от найденного, вверх по тексту
    FindBefore = - 1 
    For i = f - k To LBound(masFile) Step - 1 
        If masFile(i) =  13  Or masFile(i) =  10  Then
            FindBefore = i
            Exit For
        End If
    Next
    If FindBefore > - 1  Then
        For i = FindBefore +  1  To f - k -  1 
            LineBefore = LineBefore & Chr(masFile(i))
        Next
    End If
    Line_After = ""                     'найдём строку от найденного, вниз по тексту
    For i = f - k To UBound(masFile)
        If masFile(i) =  13  Or masFile(i) =  10  Then Exit For
        Line_After = Line_After & Chr(masFile(i))
    Next
    MsgBox LineBefore & Line_After
Else
    MsgBox "не найдено"
End If

End Sub
...
Рейтинг: 0 / 0
17.12.2008, 14:48
    #35720124
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
а какого формата эти большие текстовые логи. может их просто через ADODB.Recordset открывать и обрабатывать?
...
Рейтинг: 0 / 0
17.12.2008, 14:59
    #35720150
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Konst_Oneа какого формата эти большие текстовые логибез разницы
просто ищет совпадение указанных символов в любом файле
...
Рейтинг: 0 / 0
17.12.2008, 15:00
    #35720151
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
тогда через ADODB запросом будет проще
...
Рейтинг: 0 / 0
17.12.2008, 15:12
    #35720180
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Public Sub MakeSchema(ByVal FileName As String)
Dim s As String
Dim sFile As String
Dim ss As String
Dim sPath As String

sPath = modFiles.FileGetPath(FileName)
sFile = sPath & "SCHEMA.INI"
ss = Dir(sPath & "*.*")
Do
If ss = "" Then Exit Do
FileName = sPath & ss


s = modFiles.FileGetNameOnly(FileName) & ".txt"

modFiles.ProfileSetString s, "ColNameHeader", "True", sFile
modFiles.ProfileSetString s, "Format", "TabDelimited", sFile
modFiles.ProfileSetString s, "CharacterSet", "ANSI", sFile
modFiles.ProfileSetString s, "MaxScanRows", "0", sFile

ss = Dir()
Loop

End Sub



'*в директории c:\tmp только txt файлы ваших логов

ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;MaxBufferSize=2048;PageTimeout=5;Extensions=txt;" & _
"DBQ=c:\tmp;DefaultDir=c:\tmp;"

MakeSchema FileName

Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
cn.CommandTimeout = 20
cn.ConnectionTimeout = 30
cn.Open ConnectionString


142 Set rs = New ADODB.Recordset
144 rs.CursorLocation = adUseClient
146 Set rs.ActiveConnection = cn
SQL = "SELECT Field1 FROM [mylog#txt] WHERE Field1 LIKE '%строка%'"
148 rs.Open SQL, , adOpenStatic, adLockReadOnly, adCmdText
...
Рейтинг: 0 / 0
17.12.2008, 15:12
    #35720184
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
забыл обрамление кода ;(
...
Рейтинг: 0 / 0
05.01.2009, 12:52
    #35744657
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему валится FileSystemObject при 5-6 обращении
Konst_One
Код: plaintext
1.
2.
3.
4.
5.
6.
Schema.ini
[mylog.txt]
ColNameHeader = False
Format = TabDelimited
CharacterSet = ANSI
MaxScanRows =  0 
Col1 = Action Text
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub Command1_Click()
    Dim ConnectionString As String
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    
    ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                       "DriverId=27;FIL=text;MaxBufferSize=2048;" & _
                       "PageTimeout=5;Extensions=txt;log" & _
                       "DBQ=C:\TMP\;DefaultDir=C:\TMP;"
                       
    Set cn = New ADODB.Connection
    cn.Open ConnectionString
    
    Set rs = New ADODB.Recordset
    Set rs.ActiveConnection = cn
    
    Dim SQL As String
    SQL = "SELECT * FROM [mylog.txt] WHERE Action LIKE '*искомое слово*'"
    
    rs.Open SQL, , , , adCmdText
    
    Do While Not rs.EOF
        Debug.Print rs!Action
        rs.MoveNext
    Loop

    rs.Close:   Set rs = Nothing
    cn.Close:   Set cn = Nothing
End Sub
Вообщем все работает, правда, несколько медленнее чем если открыть Open FileLog For Binary
но в моем случае, это не критично. К тому же условия, поиска и выбора записей, могут быть разные.
И то что вы предложили, очень удобно.

Спасибо
С уважением Игорь.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему валится FileSystemObject при 5-6 обращении / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]