[VB6] Werken met filestream mogelijk??

Pagina: 1
Acties:

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Goede morgen,

Ik heb een DLL geschreven die EPS bestanden (o.a. Illustrator kan die uitspugen) annalyseerd.
Nu kan een EPS nogal eens groot worden, en is een bestand van 25 Mb ook geen uitzondering voor de toepassing waar ik ze voor nodig heb.

Wat ik op dit moment doe met het analyseren van het bestand is het volgende.
code:
1
2
3
4
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFile = FSO.GetFile("C:\Document7.eps"))
Set F = objFile.OpenAsTextStream(1, 0)
strSearchThis = F.Read(objFile.Size)


Nu vind ik dat dit niet de optimale manier is, om een bestand (in dit geval 24Mb groot) compleet in een string te stoppen. Ik weet dat je met C en Delphi met filestreams kunt werken.

Nu is mijn vraag:
Is het mogelijk om in VB6 met filestreams te werken, en zo ja, hoe?

Ik vind wel tutorials die variabelen als volgt aanmaken
code:
1
dim oFile as System.IO.ReadStream(C:\Document7.eps)

Maar, dat werkt niet in VB6, en lijkt me ook meer .NET syntax.

De volgende resources zijn al geraadpleegd.
Google.nl
vbworld.com
devguru.com
msdn.microsoft.com
GoT Search

Maar geen van deze geven oplossingen die werken :'(

Alvast bedankt voor de hulp

| Life is a game (and games are fun) | homepage |


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 10:02

johnwoo

3S-GTE

Je kunt toch ook gewoon zelf het bestand openen en telkens als je er klaar voor bent een nieuw stukje in de buffer (van bijv. 1 MB) schrijven? Dat komt in principe neer op een filestream :) Desnoods schrijf je er een wrapper classje omheen ofzo, zodat je in je programma een syntax a la strBuffer = FStream.Read(1024*1024) kunt gebruiken... Als je dan een keer data nodig hebt die al een keer voorbij is gekomen zet je de filepointer een stukje terug :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Dat met die filepointer werkt ook in VB??
Ik dacht dat pointers toch echt aan C voorbehouden waren.
Maar, ik zal eens kijken hoe dat werkt met die buffer.

| Life is a game (and games are fun) | homepage |


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 10:02

johnwoo

3S-GTE

akakiwi schreef op 10 oktober 2002 @ 13:55:
Dat met die filepointer werkt ook in VB??
Ik dacht dat pointers toch echt aan C voorbehouden waren.
Maar, ik zal eens kijken hoe dat werkt met die buffer.
Filepointers zijn een heel ander soort pointers dan de C/C++ pointers als taalconstructie :)
Zoek maar eens op Seek. De Seek functie geeft de huidige lees/schrijfpositie in een bestand terug; de Seek statement stelt deze positie ('pointer') in.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Maar, dan neem ik aan dat ik het bestand moet openen met
code:
1
Open "c:\document7.eps" for output as #1

en niet met
code:
1
2
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFile = FSO.GetFile("C:\Document7.eps"))


Toch??

| Life is a game (and games are fun) | homepage |


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Nee, lijkt me eerder:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim myString as string
dim lngFreeFile as long
Dim I as long

lngfreefile = Freefile
myStirng = Space$(1024)

Open file for Binary as lngFreeFile

For I = 0 to lof(lngfreefile) \ 1024
 Get #lngfreefile, beginpunt * 1024, myString
next I 
Close #lngFreefile


Dit doe ik nu op een vroege vrijdag, zal vast wel een fout inzitten. Als de file ook niet precies met \1024 werkt, dan zal er ook een stuk missen. Maar dit is voor jou om zelf uit te zoeken ;)

Met Get kun je dus de start positie in een filegeven. Eventueel zou je ook een ByteArray kunnen gebruiken.


Edit:

Doh, hebben het hier over schrijven. nou ja, gebruik dan put verder precies hetzelfde denk ik :P
Pagina: 1