|
VB.NET побайтовое чтение из файла
|
|||
---|---|---|---|
#18+
Здравствуйте форумчане. необходимо произвести побайтовое чтение из файла, бинарного, текстового - не суть важно. проблема с установкой положения чтения. вот код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
В итоге seek как будто не работает. считывается n-ое количество раз 1 символ файла.( помогите исправить ошибку ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2014, 17:30 |
|
VB.NET побайтовое чтение из файла
|
|||
---|---|---|---|
#18+
surbanec, здесь не нужно побайтовое чтение. Весь код заменяется одной строкой: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2014, 18:41 |
|
VB.NET побайтовое чтение из файла
|
|||
---|---|---|---|
#18+
surbanec, surbanecЗдравствуйте форумчане. необходимо произвести побайтовое чтение из файла, бинарного, текстового - не суть важно. проблема с установкой положения чтения. вот код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
В итоге seek как будто не работает. считывается n-ое количество раз 1 символ файла.( помогите исправить ошибку откуда вообще выдран этот код? Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2014, 18:53 |
|
VB.NET побайтовое чтение из файла
|
|||
---|---|---|---|
#18+
сам сфорганил код. ну уже разобрался с установкой положения чтения. просто иногда необходимо считать данные из большого файла от 10мб и выше. для этого я и хочу сделать побайтовую загрузку, либо загрузку блоками по несколько кб. Dim RetStr As String = System.IO.File.ReadAllText("C:\f.txt") этот код будет актуален с маленькими файлами или если его пустить во 2ой поток чтобы основной поток в котором форма не зависал. всеравно в некоторых случаях не нужно считывать файл целиком. например считать определенный кусок из файла... ну в общем решил реализовать через FileStream. там можно установить позицию чтения и считать как 1 байт так и блоками по несколько байт ну всеже спасибо за то что ответили) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2014, 19:56 |
|
VB.NET побайтовое чтение из файла
|
|||
---|---|---|---|
#18+
surbanec, для обработки больших файлов совсем не обязательно читать их побайтово. Во-первых, можно прочитать его построчно: Код: vbnet 1. 2. 3. 4. 5.
Во-вторых, построчное чтение можно объединить с буферизованным чтением: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
В-третьих, ты делаешь ошибочное предположение что один байт, соответствует одному символу. Это не так т.к. существуют многобайтовые кодировки (например, семейство Unicode). Более того в рамках Unicode могут встречаться байты которым не соответствует никакой символ - так называемый Byte Order Mark (BOM). Чтобы не было проблем надо читать текстовые файлы с помощью предназаченых для этого классов. Например, StreamReader. При это следует явно указать кодировку или полагаться на кодировку по умолчанию - utf-8. P.S. Твой первоначальный код не работал из-за лишнего аргумента в функции FileGet т.к. третий параметр указывает позицию с которой нужно начать чтение. P.P.S. Первоначальный код также крайне неэффективно использует память. Ты объявил массив строк, затем создаешь отдельные элементы этого массива и, в конце, получаешь итоговую строку. Это неэффективно т.к. заставляет тратить место на массив и на отдельные строки (которые состоят всего из одного символа). У сборщик мусора будет очень много работы в таком случае. И кол-во этой работы прямо пропорционально длине файла. Ты пылался съэкономить память, а на деле ты её зря тратил. Вот такая ирония :) Для эффективного конструирования строк лучше использовать класс System.Text.StringBuilder. Сначала мы бы создали его - New StringBuilder(allFile) - сразу с нужной длиной. Затем с помощью метода Append() добавляли символы. И в конце вызвали бы метод ToString(). Затраты памяти были бы ниже. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2014, 19:10 |
|
|
start [/forum/topic.php?fid=20&fpage=131&tid=1403383]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 359ms |
total: | 503ms |
0 / 0 |