powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чтение файла большого размера и сохранение его побайтно с другим именем
11 сообщений из 11, страница 1 из 1
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38485784
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищу другие варианты для чтения и сохранения файла большого размера. А в моем случае - передача файла по сети своей программой.

С большим размером файла LOF начинает ругаться, что в принципе логично. Есть другие варианты, можно читать кусками файл, но я еще не определился какой именно способ подойдет наилучше. Трудность в том, что программу тяжело отслеживать так как одна работает как сервер, а другая как клиент и умеет работать наоборот. На эксперименты уйдет день. Если есть практика, прошу помощи.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub Timer3_Timer()
  If PBGotovnistTransportSend = True Then Exit Sub
  
  Const BufferLength As Long = 65000
'''On Error Resume Next
  Dim Buffer As String
  If RegimRobWSk = 22 Then
     PBGotovnistTransportSend = True
     If Loc(78) + BufferLength > LOF(78) Then
       Buffer = String(LOF(78) - Loc(78), 0)
     Else
       Buffer = String(BufferLength, 0)
     End If
      Get #78, , Buffer
      Winsock3.SendData Buffer
      LblProc = Int((Loc(78) / LOF(78)) * 100)
      If Loc(78) >= LOF(78) Then
        Close #78
        LblProc = "ok"
        Timer3.Interval = 0
      End If
      PBGotovnistTransportSend = False
  End If
End Sub
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38485820
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

Почему Вы для чтения файла не используете специально для этого имеющиеся классы?
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486123
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю никаких классов. Да и тестировал: работа через классы удобная но чуть помедленней будет работать.
Были как-то проблемы с FileLen функцией. Сначала вроде все нормально работало, потом ошибки посыпались и я попробовал заменить эту функцию на LOF, которая не подводила с малым размером. Отсчет могу делать неважно как, даже просто переменной можно подсчитывать поточное положение. А вот длину файла нужно знать точно. Моя задача - узнать точно длину файла, чтоб функция работала безотказно. Дальше все работает. Например open... binary также работает отлично с любой длинной. Но нужно считывать данные порциями, а в конце порция может быть меньшая. Именно потому и заморачиваюсь
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486247
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так открывай свой файл как поток (хоть textstream, хоть ado.stream) и читай... и позицию проверять не надо, как до конца доберёшься, он тебе отдаст, что осталось, и скажет, что больше нет.
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486345
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отлично. А в этом потоке можно указывать части (размер блоков) ?
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486381
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эммм... а справку читать не пробовал? параметры какие, примеры там посмотреть..
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486689
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

Я давно такое не делал, поэтому насчет порций не скажу, но под классом я и подразумевал класс TextStream.
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486691
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменил конструкцию GET на INPUT(Nb,#nomFile) - работает отлично с большим объемом.
Спасло то, что остатки файла несмотря на указание параметра "Nb" в INPUT не вызывает ошибку.

Код: vbnet
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.
Private Sub Timer3_Timer()
  If PBGotovnistTransportSend = True Then Exit Sub
  
  Const BufferLength As Long = 65000
'''On Error Resume Next
  Dim Buffer As String
  If RegimRobWSk = 22 Then
     PBGotovnistTransportSend = True
'''     If Loc(78) + BufferLength > LOF(78) Then
'''       Buffer = String(LOF(78) - Loc(78), 0)
'''     Else
'''       Buffer = String(BufferLength, 0)
'''     End If
'''      Get #78, , Buffer
Static cicl As Long
che:
  
      If EOF(78) Then
        Close #78
        LblProc = "ok"
        Timer3.Interval = 0
        PBGotovnistTransportSend = False
        Exit Sub
      End If
      
      
      
      Buffer = Input(BufferLength, 78)


      
      Winsock3.SendData Buffer
      LblProc = 1 'Len(Buffer) 'Int((Loc(78) / LOF(78)) * 100)

'cicl = cicl + 1
'If cicl < 10 Then GoTo che Else cicl = 0
'''      If Loc(78) >= LOF(78) Then
      If EOF(78) Then
        Close #78
        LblProc = "ok"
        Timer3.Interval = 0
      End If
      PBGotovnistTransportSend = False
  End If
End Sub



Но на этом эксперименты не прекращаю. Охотно попробую чтение и запись в режиме Random что в будущем, если все тесты будут успешны, даст возможность делать докачки и закачки в несколько потоков.
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486703
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно такое наблюдение, вероятно может кому и пригодится:
В предыдущем коде есть метка "che:"
а две строчки отключены:
Код: vbnet
1.
2.
3.
4.
Static cicl As Long

'cicl = cicl + 1
'If cicl < 10 Then GoTo che Else cicl = 0



Прокомментирую строчки.
Хотел увеличить скорость передачи данных, в результате скорость в десятки а может и больше упала. Тогда решил проверить что делается в "диспетчере задач Виндовс". А там обнаружил, что объем программы растет с каждой секундой на килобайты. Поставил код на паузу и закоментировал две строчки. После этого память больше не увеличивалась. А спустя три минуты объем программы медленно опустился до изначального уровня. Таймер стоит на 10мс. Если таймер не использовать, то при габаритном файле выскакивает ошибка которая матерится на Memory (что там дальше не брал во внимание, так как видел что память увеличивается). Doevents не спасает от горя, а таймер - запросто. Скорость копирования на адрес 127.0.0.1 примерно в среднем + - = 1 мегабайта в секунду
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486746
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарвешил. Дозагрузка невозможна (произвальная перезапись нужных участков) если размер превышает больше 2гб
...
Рейтинг: 0 / 0
Чтение файла большого размера и сохранение его побайтно с другим именем
    #38486789
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал обычную докачку типа append просто предварительно сверив длину файлов на local и remote PC. Работает за счет файлов с расширением *.*.tmp Так их и отлавливаю для анализа. Остается сверить, докачать и переименовать. Все. Можно тему закрывать
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чтение файла большого размера и сохранение его побайтно с другим именем
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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