Toon posts:

[C++] EOF naar file schrijven na X aantal bits

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil in C++ een bestand afbreken na x aantal bits. (dus er een EOF achter hebben) iemand enig idee hoe dit voor elkaar te krijgen ?

alleen x aantal bits kopieeren naar een ander bestand, en die renamen. is t niet, duurt te lang (niet voor mij om te coden, maar tijdens t programma)

x aantal bites inlezen in t geheugen en t bestand opnieuw schrijven wordt t ook niet, daar de bestanden nogal groot kunnen worden

  • Marcj
  • Registratie: November 2000
  • Laatst online: 11:58
Als je het bestand sluit (fclose()) wordt er toch direct een EOF geschreven :?

Verwijderd

Topicstarter
Op maandag 20 mei 2002 21:12 schreef Marcj het volgende:
Als je het bestand sluit (fclose()) wordt er toch direct een EOF geschreven :?
hmm, maar ik wil dat ie eerder gesloten wordt... as in..

t bestand was 1400 bytes groot. en dan wil ik dat ie nog maar 1300 bytes groot is...

  • Marcj
  • Registratie: November 2000
  • Laatst online: 11:58
hmm, dan zal het toch iets worden als dit:
code:
1
2
3
4
5
6
BYTES inhoud[1300];
FILE f = fopen("blaat.txt", br);
inhoud = fread(f, 1300);
fclose(f);
FILE f = fopen("blaat.txt", bw);
fwrite(f, inhoud);

Nou ja, je snapt wat ik bedoel. Dit lijkt me echt de enige manier, anders blijven er een 100 bits achter die wel weggeschreven zijn, maar niet gebruikt worden.

Verwijderd

Topicstarter
Op maandag 20 mei 2002 21:22 schreef Marcj het volgende:
hmm, dan zal het toch iets worden als dit:
code:
1
2
3
4
5
6
BYTES inhoud[1300];
FILE f = fopen("blaat.txt", br);
inhoud = fread(f, 1300);
fclose(f);
FILE f = fopen("blaat.txt", bw);
fwrite(f, inhoud);

Nou ja, je snapt wat ik bedoel. Dit lijkt me echt de enige manier, anders blijven er een 100 bits achter die wel weggeschreven zijn, maar niet gebruikt worden.
as said, in mijn post, is dit niet de manier omdat de bestanden nogal groot kunnen worden...

hmmm, is t niet mogelijk een bestand gewoon te truncaten na X aantal bits/bytes ??

  • Marcj
  • Registratie: November 2000
  • Laatst online: 11:58
Misschien een idee om een pointer naar het einde van het bestand te gaan, en dan steeds een byte verwijderen en dan de pointer één terug :? (enzovoorts..)

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Probeer eens truncate() en ftruncate() uit de unistd.h (weet niet of het ook op windows beschikbaar is, maar denk het wel).


EOF is in principe een \026 karakter. In tekst-files zou je dit karakter kunnen invoegen op de plek waar jij de file wilt truncaten. Een (groot) nadeel: je bestand blijft evengroot, en niet elk programma hoeft de \026 te zien als een eof.

In binary files wordt dit natuurlijk al helemaal lastig aangezien er geen speciaal teken hiervoor beschikbaar is.

En: truncen op x bits kan natuurlijk alleen als x een veelvoud is van 8 :)

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

Topicstarter
Op maandag 20 mei 2002 21:32 schreef JayTaph het volgende:
Probeer eens truncate() en ftruncate() uit de unistd.h (weet niet of het ook op windows beschikbaar is, maar denk het wel).
extra handicap: MacOS :) maar wel C++ STL
EOF is in principe een \026 karakter. In tekst-files zou je dit karakter kunnen invoegen op de plek waar jij de file wilt truncaten. Een (groot) nadeel: je bestand blijft evengroot, en niet elk programma hoeft de \026 te zien als een eof.
maar, zoals je evenlater zegt
In binary files wordt dit natuurlijk al helemaal lastig aangezien er geen speciaal teken hiervoor beschikbaar is.
werkt t niet :) daar t een binary file is... dus, iemand die zich alsnog geroepen voelt :D

edit:

note: MacOS 9, dus niet X, want dan had ik die opmerking niet gemaakt :)

Verwijderd

Topicstarter
Oke dan :) na t raadplegen op een newsgroup, werdt mij de volgende oplossing aangedragen, die ik met jullie wil delen, voor als iemand ook eens met deze vraag zit..:

MacOS: de SetEOF functie, check
http://developer.apple.com/techpubs/mac/Files/Files-135.html
voor de exacte uitleg

Windows: de SetFilePointer, zul je zelf even op microsoft.com ofzow moeten kijken :)

Linux: ftruncate() functie, in welke lib deze staat weet ik niet.


note: voor linux en windows heb ik niet uitgezocht, maar je weet nu in ieder geval dat t kan ;)
Pagina: 1