Как засунуть 2 Гб в строковую переменную?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Glyckmen
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 30.04.2006 (Вс) 15:32
Откуда: Санкт-Петербург

Как засунуть 2 Гб в строковую переменную?

Сообщение Glyckmen » 17.05.2006 (Ср) 11:09

Все вроде бы просто и везде пишут что строковая переменная может хранить до 2 Гб данных, но у меня почему-то уже на функции
Код: Выделить всё
stroka=spc(filelen(infile))
выскакивает ошибка <Out of memory> , это при попытке вместить 100 Мб, при попытке вместить 60 Мб все прошло хорошо. Кто может подсказать в чем проблема, почему я не могу работать со сроками до 2 Гб. ?
PS:Память в компе стоит 2 Гб, HDD 120 Гб и свободен на 50%, файл подкачки не отключен.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 17.05.2006 (Ср) 11:24

Странное применение функции Spc.
Посмотри в Help-е для чего она нужна и пример ее применения.

Создать строковую переменную занимающую 100 000 000 байт можно следующим кодом.

Код: Выделить всё
    Dim s As String
   
    s = Space(50000000)  ' заполняется пробелами


Ну и вообще-то пытаться запихнуть такой файл в переменную - это немножко маразм. Под переменные выделяется только физическая память, которая к тому-же нужна и другим юзерам. И не на всех машинах по 2GB оперативки. Так что лучше работай с файлом по частям.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 17.05.2006 (Ср) 11:36

Чтобы у тебя получилось сделать переменную, в которую бы поместилось 2Г, памятив компе д.б. как минимум 4Г. И то, не факт кстати что это будет нормально работать.

Так что, лучше читай файл по частям, это хороший совет.

Glyckmen
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 30.04.2006 (Вс) 15:32
Откуда: Санкт-Петербург

Сообщение Glyckmen » 17.05.2006 (Ср) 12:02

:oops: Пардон немного ошибся с функциями (писал пост об одном, а в голове сидела мысль по другому модулю мой проги)
На самом деле эта часть кода в программе выглядит так:
Код: Выделить всё
lenfil = FileLen(inputfile)
strok = Space(lenfil)
hfile = CreateFile(inputfile, GENERIC_READ, FILE_SHARE_READ,  _
           ByVal CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
retval = ReadFile(hfile, ByVal strok, lenfil, numread, ByVal CLng(0))
retval = CloseHandle(hfile)

Во время выполнения программы все проходит и никаких ошибок не возникает, но как только я эту переменную strok хочу обработать дальше, то тут и вылезает ошибка <Out of memory>.
Просто хотел обработать файл сразу за раз, думал что прокатит. Ну раз VB не хочет обрабатывать такой объем, то пойду другим путем. Спасибо за разъяснения по поводу памяти.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 118

    TopList  
cron