Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбить файл на 2 части и обратно собрать 
:(
    Опции темы
kapbepucm
Дата 4.9.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Застрял на такой ерунде: надо сделать 2 процедуры.
Код
Public Sub Razbit(IshodijFail As String, Pervij As String, DlinaPervogo As Long, Vtoroj As String)
'Разбить файл IshodijFail (создать 2 новых),
'где длина Pervij в байтах = DlinaPervogo
End Sub
Public Sub Sobratj(Pervij As String, Vtoroj As String, Rezultat As String)
'обратная операция: фаил Pervij объединить с Vtoroj в Rezultat
End Sub
Всё что я делал, получается громоздко и запутано. Файлы будут длиной 4Гб.


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
bom
Дата 4.9.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

Репутация: 4
Всего: 6



Цитата(kapbepucm @  4.9.2007,  15:33 Найти цитируемый пост)
Застрял на такой ерунде

Чего ж застрял, если ерунда?

Цитата(kapbepucm @  4.9.2007,  15:33 Найти цитируемый пост)
Всё что я делал, получается громоздко и запутано.

А ты делай красиво и оптимально smile

Что конкретно вызывает затруднение? Не мешало бы привести здесь свои наработки чтобы получить помощь.

PM MAIL   Вверх
Akina
Дата 4.9.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Где плоды своей работы? без них тема - кандидат на вылет в "Поиск специалистов".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 4.9.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Вот, чем сей-час пользуюсь:
Код
Public Sub Razbit(IshodnijFail As String, Pervij As String, DlinaPervogo As Long, Vtoroj As String)
  Open IshodnijFail For Random As #3 Len = 1
  Open Pervij For Random As #1 Len = 1
  Open Vtoroj For Random As #2 Len = 1
  Dim Buf As Byte
  Dim I As Long
  For I = 1 To DlinaPervogo
    Get #3, I, Buf
    Put #1, I, Buf
  Next I
  For I = DlinaPervogo + 1 To FileLen(IshodnijFail)
    Get #3, I, Buf
    Put #2, I - DlinaPervogo, Buf
  Next I
  Close #1
  Close #2
  Close #3
End Sub
Public Sub Sobratj(Pervij As String, Vtoroj As String, Rezultat As String)
  Open Pervij For Random As #1 Len = 1
  Open Vtoroj For Random As #2 Len = 1
  Open Rezultat For Random As #3 Len = 1
  Dim Buf As Byte
  Dim I As Long
  For I = 1 To FileLen(Pervij)
    Get #1, I, Buf
    Put #3, I, Buf
  Next I
  Dim DlinaPervogo As Long
  DlinaPervogo = FileLen(Pervij)
  For I = 1 To FileLen(Vtoroj)
    Get #2, I, Buf
    Put #3, I + DlinaPervogo, Buf
  Next I
  Close #1
  Close #2
  Close #3
End Sub
Видимо 4Гб придётся разбивать не один час smile

Это сообщение отредактировал(а) kapbepucm - 4.9.2007, 15:26


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 4.9.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Следует использовать потоковое чтение сразу нужного объема информации (см. Open For Binary - Get) или, если DlinaPervogo велика - кластеризовать чтение начала.
Но еще разумнее выполнить операцию через FileSystemObject.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
admsasha
Дата 4.9.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Я бы сделал так копирование, из этого примера думаю, додумаешь. Если нет, напишу полный вариант.
700Mb скопировался за 30 секунд

Код

Private Const maxBuf = 36000

Public Sub Razbit(IshodijFail As String, Pervij As String, DlinaPervogo As Long, Vtoroj As String)
   Dim Byte1 As String * maxBuf
   Dim Byte2 As Byte
   Dim i As Long
   Open IshodijFail For Binary As 1
   
   Open Pervij For Binary As 2
      For i = 0 To Int(DlinaPervogo / maxBuf) - 1
         Get #1, (i * maxBuf) + 1, Byte1
         Put #2, (i * maxBuf) + 1, Byte1
      Next i
      For i = Int(DlinaPervogo / maxBuf) * maxBuf To DlinaPervogo
         Get #1, i, Byte2
         Put #2, i, Byte2
      Next i
      
   Close 2
   Close 1
End Sub

PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 4.9.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



admsasha, как раз пример кластеризации чтения. Только размер буфера следовало бы выбирать кратным размеру кластера файловой системы (при использовании fixed length string разумно использовать 32 или 64 кб) - это несколько снижает накладные расходы на выполнение операций.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0999 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.