Страница: 1 |
Страница: 1 |
Вопрос: Как быстро считать из файла?
Добавлено: 31.10.04 00:42
Автор вопроса: KirillSergeevich | ICQ: 7576777
Народ, помогите начинающему в простом вопросе...
Мне нужно загнать в СТРОКОВЫЕ переменные, например, первые 1500 байт каждого из, например, ста файлов. Причем файлы НЕ текстовые. Лучше если загнать диапазон, например, с 1000 по 1500.
Пробовал побайтво, но это очень долго...
Dim Sk As String
Dim Tmp As Byte
Dim i As Int32
FileOpen(1, "D:\Temp.jpg", OpenMode.Binary)
For i = 1000 To 2000
FileGet(1, Tmp, i)
Sk = Sk + Chr(Tmp)
Next
FileClose(1)
Это чтение только одного файла... Уже 0.3 секунды, а если их 100... или 1000.
(Куча книжек по VB .Net, а конкретного ответа найти не могу)
Спасибо!
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 31.10.04 01:23
dim nf as integer: nf = freefile
sim str as string
open lpFileName for binary access read lock write as nf
str = string(log(nf), 0&
get nf, vbnull, str
close nf
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 31.10.04 01:28
ох, черт, это .НЕТ ((
прошу прощения, я больше не буду, впредь буду внимательней...
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 31.10.04 02:00
 im SR As New System.IO.StreamReader(FileName, System.Text.Encoding.GetEncoding(1251))
 im strTemp As String = SR.ReadToEnd
SR.Close()
Попробуй. Быстрее уже, наверное, не получится.
Номер ответа: 4
Автор ответа:
KirillSergeevich
ICQ: 7576777
Вопросов: 4
Ответов: 11
Профиль | | #4
Добавлено: 31.10.04 02:03
Спасибо, но я ничего не понял... И, кажется... это 6-й или 5-й бейсик... а мне бы .NET
Номер ответа: 5
Автор ответа:
KirillSergeevich
ICQ: 7576777
Вопросов: 4
Ответов: 11
Профиль | | #5
Добавлено: 31.10.04 02:06
Artyom, спасибо. Это уже похоже на .NET, но... Как считать только диапазон с 1000 по 2000 байт... Если у меня файлы по 1.5 Мб, и файлов 1000... Как быть..
Номер ответа: 6
Автор ответа:
KirillSergeevich
ICQ: 7576777
Вопросов: 4
Ответов: 11
Профиль | | #6
Добавлено: 31.10.04 02:07
Имеется ввиду с тысячного по двухтысячный байты...
Номер ответа: 7
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #7
Добавлено: 31.10.04 09:43
Пишу по памяти...
Dim fs As New FileStream ("file.bin", FileAccess.Read)
Dim br As New BinaryWriter (fs)
fs.Position=999 'Так как позиция считается с 0, а не с 1
Dim bytes() As Byte = br.ReadBytes(1000) 'Здесь указывается кол-во читаемых байт
br.Close
fs.Close
'В результате в байтовом массиве bytes лежат нужные данные
Номер ответа: 8
Автор ответа:
KirillSergeevich
ICQ: 7576777
Вопросов: 4
Ответов: 11
Профиль | | #8
Добавлено: 01.11.04 00:11
Так... Супер... По пяти книжкам вчера искал, нашел в одной (но не получилось, как ни мучался, хоть это было для эксперимента)...
Теперь вопрос... Мне нужно было, чтобы это всё было в строке (String) для того, чтобы найти в JPG файле EXIF-информацию и теги Фотошопа... Дата - ладно, но теги... В HEX-вьювере они представляют что-то типа: (1C 02 05 00 13... далее текст) пару байт меняется и это уже не "название фотки", а место, профессия, ключевые слова и т.п... КАК с байтовым массивом я поиск по (1C 02 05 00 13) совершу?
Кучу вариантов перепробовал... ПОДСКАЖИТЕ ПЛЗ... Как лучше (собственно задача) Из всех файлов директории (их может быть 1000 или больше) считать БЫСТРО теги фотошопа... Они находятся в первых 2К любого файла...
Спасибо огромное!
Номер ответа: 9
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #9
Добавлено: 01.11.04 18:13
Самый простой вариант - с помощью класса System.Text.Encoding
преобразовать исходный байтовый массив и искомую последовательность
байт в строки, а потом проводить поиск одной строки в другой с помощью
метода IndexOf.
Номер ответа: 10
Автор ответа:
KirillSergeevich
ICQ: 7576777
Вопросов: 4
Ответов: 11
Профиль | | #10
Добавлено: 01.11.04 20:08
Если не сложно - можешь наглядно показать?
Например есть массив М и стр.перем. S
 im M(1000) as byte
 im S as string
... (считываем массив из файла)
Теперь нужно М превратить в S... Как?
Спасибо огромное!
Номер ответа: 11
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #11
Добавлено: 02.11.04 08:06
S = Sytem.Text.Encoding.Default.GetString(M)
Номер ответа: 12
Автор ответа:
KirillSergeevich
ICQ: 7576777
Вопросов: 4
Ответов: 11
Профиль | | #12
Добавлено: 02.11.04 22:11
Павел, спасибо огромнейшее за помощь!