» »

VB6..velikost nove kreirane datoteke iz stare se čudežno spremeni

VB6..velikost nove kreirane datoteke iz stare se čudežno spremeni

zeko3 ::

Imam hud problem, s katerim se prvič soočam....zato je problem :)

Imam kodo v datotekah module.bas in form.frm.

Module.bas vsebuje:
Public moja
Public dolzina, n As Long 'dolžina brane datoteke
Public VsnemaniData() As Byte 'sem se hranijo podatki datoteke
Public VhodnaDatoteka, IzhodnaDatoteka As String 'imeni vhodne in izhodne datoteke

Form.frm vsebuje

Private Sub Command1_Click() 'prebere datoteko
VhodnaDatoteka = App.Path & "\PoslanaDatoteka.jpg"
moja = FreeFile
Open VhodnaDatoteka For Binary Access Read As #moja
dolzina = FileLen(VhodnaDatoteka)
ReDim VsnemaniData(dolzina)
Get #moja, , VsnemaniData
Close #moja
End Sub

Private Sub Command2_Click() 'zapiše zatoteko
IzhodnaDatoteka = App.Path & "\VrnjenaDatoteka.jpg"
moja = FreeFile
Open IzhodnaDatoteka For Binary Access Write As #moja
Put #moja, , VsnemaniData
Close #moja
End Sub

Problem pa je sledeč:
Datoteka, ki se kreira iz prve je zmeraj večja za 1 B (en bajt), kot je bila vhodna datoteka.
Morda bo kdo rekel, da bi bilo enostavneje datoteko le preimenovati, toda to ni to kar rabim.
Do tega povečanja za en bajt pride tudi v primeru, ko hranjenih podatkov v 'VsnemaniData' popolnoma nič ne spreminjam.
Pri slikah težava ni kritična, saj delujejo tudi po tem povečanju, toda gre za hudo težavo ko tako berem in zapisujem v datoteko tipa *.zip, takrat se vsi podatki zgubijo.

Zadnji bajt, ki se na koncu datoteke kreira ima zmeraj vrednost 00(hex).

Kaj delam narobe?
Lepo prosim za pomoč.

zeko3 ::

Ker ni bilo odgovora tako dolgo na moje vprašanje, domnevam, da je malo tistih, ki bi zadevo poznali.

Medtem sem odgovor našel sam, lahko pa rečem, da sem za to porabil ves čas odkar se tukaj postavil vprašanje (vmes sem samo malo spal).

Odgovor se glasi:

V datoteki form.frm je med deklaracije potrebno vpisati vrstico:

Option Base 1



Res popolnoma nič drugega, morda bo nekoč komu prišlo prav.
Čeprav še sam ne vem tega, zakaj ta vrstica kode služi, pa zadeva potem res dela.

Nenavadno toda resnično.

Če se najde kdo, ki bi zadevo znal razložiti, pa lepo prosim za pojasnilo.

BigWhale ::

Option base 0 | 1 ti pove ali se polja (array) zacnejo z indexom 0 oziroma 1.

Option base 0
Dim lala(3) As String ---> memberji so 0,1,2,3

Option base 1
Dim lala(3) As String ---> memberji so 1,2,3

darkolord ::

Jaz bi na tvojem mestu raje uporabil recimo tole:

ReDim VsnemaniData(dolzina - 1)

namreč če uporabljaš enkrat zero-based arraye, drugič pa ne, lažje pride do kake zmešnjave :D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

rabib vba kodo za shranjevanje v bin (iz excella)

Oddelek: Programiranje
7884 (666) Silikon
»

visual basic 2008 express edition

Oddelek: Programiranje
221827 (1254) sel
»

Izdelovanje xml v excelu

Oddelek: Programska oprema
91080 (974) madmitch
»

[VB] graf, merilnik hitrosti, termometer

Oddelek: Programiranje
52314 (2179) darkolord
»

VB6 tezava

Oddelek: Programiranje
6987 (927) Slide

Več podobnih tem