2015-11-21 3 views
1

Мне нужно объединить несколько текстовых файлов, для которых каждый входной файл составляет около 3,5 ГБ. Это простые файлы, содержащие vbCrLf в концах строк.Строка длиной более 2 ГБ

В предыдущем коде, который я использовал для извлечения текстовых потоков с веб-страниц (см. Ниже), используется функция Peek (см. Ниже), и мне интересно, может ли Peek использоваться для чтения менее 2 ГБ из файла -> write to конкатенированный файл, а затем продолжить в последней половине каждого файла?

Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8") 
Dim readStream As New StreamReader(recvStream, encode) 
Dim sPage As String 
sPage = "" 
While (readStream.Peek() > -1) 
    sPage += readStream.ReadLine() + vbCrLf 
End While 

В принципе, я не мог прочитать, скажем, 1,8 Гб с помощью Peek, написать (СЦЕПИТЬ), Peek, конкатенации и т.д. без после потери ничего. Есть ли что-нибудь еще, что возьмет поток 3.5GB, который я мог бы написать, чтобы писать с помощью StreamWriter?

+0

ли приложение 64-битное приложение на 64-разрядной версии Windows, в? –

+0

Вы видели перегрузку [Метод StreamReader.Read (Char(), Int32, Int32)] (https://msdn.microsoft.com/en-us/library/9kstw824%28v=vs.110%29.aspx) который позволяет читать в кусках? Затем вместо хранения данных в строке просто записывайте их в файл назначения, когда вы читаете каждый фрагмент. Я предлагаю размер буфера 32768 для начала. –

+0

Благодаря @Andrew - StreamReader.Read работал и решил проблему. – wrtsvkrfm

ответ

0

Здесь было решение:

Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8") 
Dim readStream As New StreamReader(recvStream, encode) 
Dim str, sPage As String 
sPage = "" 
While (readStream.Peek() > -1) 
    sPage += readStream.Read(str, 0, 32768) 
End While 
'Next, split the string into lines at the carriage returns 
Dim Buff() As String = Split(sPage, vbCrLf) 
Смежные вопросы