Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 31.10.04 01:28
ох, черт, это .НЕТ :(((

прошу прощения, я больше не буду, впредь буду внимательней...

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 31.10.04 02:00
        ;Dim SR As New System.IO.StreamReader(FileName, System.Text.Encoding.GetEncoding(1251))
        ;Dim 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-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #9
Добавлено: 01.11.04 18:13
Самый простой вариант - с помощью класса System.Text.Encoding
преобразовать исходный байтовый массив и искомую последовательность
байт в строки, а потом проводить поиск одной строки в другой с помощью
метода IndexOf.

Ответить

Номер ответа: 10
Автор ответа:
 KirillSergeevich



ICQ: 7576777 

Вопросов: 4
Ответов: 11
 Профиль | | #10 Добавлено: 01.11.04 20:08
Если не сложно - можешь наглядно показать?
Например есть массив М и стр.перем. S
  ;Dim M(1000) as byte
  ;Dim S as string
  ... (считываем массив из файла)
  
  Теперь нужно М превратить в S... Как?

Спасибо огромное!

Ответить

Номер ответа: 11
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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
Павел, спасибо огромнейшее за помощь!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам