OVH Cloud OVH Cloud

Effacer contenu d'un fichier

11 réponses
Avatar
scraper
Bonjour à tous !

petit souci (sans doute très simple ....) sur lequel je bute :-(

j'ouvre un fichier avec VB
je récupère son contenu dans un buffer, et je le modifie ....

je voudrais réécrire le buffer ainsi modifié dans le même fichier (jusque
là, pas de soucis)
mais au préalable, je voudrais effacer le contenu de ce fichier, de manière
qu'une fois celui ci réécrit, sa taille soit exactement celle du buffer
modifié ? :-)


le début de mon code :


Dim sBuffer as String
Dim k as integer

k = FreeFile
Open File For Binary Access Read Write As #k
sBuffer = String$(LOF(k), vbNullChar)
Get #k, , sBuffer

'sBuffer= ..... '(modification du contenu du fichier)

Put #k, 1, sBuffer

Close #k



merci de votre aide



--
Adresse invalide
Mon site : http://scraper.chez-alice.fr

scraper

10 réponses

1 2
Avatar
Fred
Dans : news:
scraper écrit :
Bonjour à tous !



Hello scraper :-)

mais au préalable, je voudrais effacer le contenu de ce fichier, de
manière qu'une fois celui ci réécrit, sa taille soit exactement celle
du buffer modifié ? :-)



J'ai recherché en vain une fonction «truncate» dont je croyais me
souvenir !
(je dois me mélanger les octets)
Je ne vois rien en vb6 qui permette cela, mais cela ne veut pas dire que
cela n'existe pas.

Pourquoi ne pas effacer le fichier ? Bon, d'accord, cela oblige à
l'ouvrir et le fermer deux fois.
Pour plus de sécurité, tu peux passer par un fichier temporaire. Pour le
cas tordu où les permissions autoriseraient la suppression mais pas
l'ajout !

Mais je me demande où j'ai vu ce truncate, peut-être QBasic lol

PS : Un FIX à réécrire ? ;-)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
X
Faut faire ça par exemple:

close k
k = FreeFile
Open File For Output As k
' (écrasement), "File" est une variable contenant le nom du ficier ???
close k
Open File For Binary As k
Put k, , sBuffer
close k


--
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"scraper" a écrit dans le message de news:

Bonjour à tous !

petit souci (sans doute très simple ....) sur lequel je bute :-(

j'ouvre un fichier avec VB
je récupère son contenu dans un buffer, et je le modifie ....

je voudrais réécrire le buffer ainsi modifié dans le même fichier (jusque
là, pas de soucis)
mais au préalable, je voudrais effacer le contenu de ce fichier, de
manière qu'une fois celui ci réécrit, sa taille soit exactement celle du
buffer modifié ? :-)


le début de mon code :


Dim sBuffer as String
Dim k as integer

k = FreeFile
Open File For Binary Access Read Write As #k
sBuffer = String$(LOF(k), vbNullChar)
Get #k, , sBuffer

'sBuffer= ..... '(modification du contenu du fichier)

Put #k, 1, sBuffer

Close #k



merci de votre aide



--
Adresse invalide
Mon site : http://scraper.chez-alice.fr

scraper


Avatar
scraper
Bonjour Fred, dans le message
news:etIfu$
tu disais :

Dans : news:
scraper écrit :
Bonjour à tous !



Hello scraper :-)

mais au préalable, je voudrais effacer le contenu de ce fichier, de
manière qu'une fois celui ci réécrit, sa taille soit exactement celle
du buffer modifié ? :-)



J'ai recherché en vain une fonction «truncate» dont je croyais me
souvenir !
(je dois me mélanger les octets)
Je ne vois rien en vb6 qui permette cela, mais cela ne veut pas dire
que cela n'existe pas.

Pourquoi ne pas effacer le fichier ? Bon, d'accord, cela oblige à
l'ouvrir et le fermer deux fois.
Pour plus de sécurité, tu peux passer par un fichier temporaire. Pour
le cas tordu où les permissions autoriseraient la suppression mais pas
l'ajout !

Mais je me demande où j'ai vu ce truncate, peut-être QBasic lol

PS : Un FIX à réécrire ? ;-)



lol
voila ;-)

et tu comprends que vu le fichier, difficile de l'effacer !
en même temps, je ne le souhaite pas ;-)


c'est pas très gênant : juste un octet de trop en fin de fichier ....
mébon, quitte à faire les choses ;-)

si tu as d'autres idées ;-)




--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Fred
Dans : news:%
scraper écrit :
Bonjour Fred, dans le message
news:etIfu$
tu disais :

Dans : news:
scraper écrit :
Bonjour à tous !



Hello scraper :-)

mais au préalable, je voudrais effacer le contenu de ce fichier, de
manière qu'une fois celui ci réécrit, sa taille soit exactement
celle du buffer modifié ? :-)



J'ai recherché en vain une fonction «truncate» dont je croyais me
souvenir !
(je dois me mélanger les octets)
Je ne vois rien en vb6 qui permette cela, mais cela ne veut pas dire
que cela n'existe pas.

Pourquoi ne pas effacer le fichier ? Bon, d'accord, cela oblige à
l'ouvrir et le fermer deux fois.
Pour plus de sécurité, tu peux passer par un fichier temporaire. Pour
le cas tordu où les permissions autoriseraient la suppression mais
pas l'ajout !

Mais je me demande où j'ai vu ce truncate, peut-être QBasic lol

PS : Un FIX à réécrire ? ;-)



lol
voila ;-)

et tu comprends que vu le fichier, difficile de l'effacer !
en même temps, je ne le souhaite pas ;-)


c'est pas très gênant : juste un octet de trop en fin de fichier ....
mébon, quitte à faire les choses ;-)

si tu as d'autres idées ;-)



L'API SetEndOfFile ?

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Fred
Dans : news:
Fred écrit :

L'API SetEndOfFile ?



http://www.allapi.net/apilist/SetEndOfFile.shtml

(il y a un exemple)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Vincent Guichard
scraper a écrit :
Bonjour à tous !



Bonsoir.

Mis à part fermer, effacer et rouvrir le fichier (comme dit Fred), la
seule solution que je vois passe par l'API SetEndOfFile.
Malheureusement, cela implique probablement d'ouvrir, de lire, d'écrire
et de fermer le fichier à l'aide des fonctions de l'API (CreateFile,
ReadFile, WriteFile et CloseHandle) et non à l'aide des fonctions VB6
(open, get, put et close).

Vincent Guichard
Avatar
scraper
Bonjour Fred, dans le message
news:
tu disais :

Dans : news:
Fred écrit :

L'API SetEndOfFile ?





ouiiiii ! lol

http://www.allapi.net/apilist/SetEndOfFile.shtml

(il y a un exemple)



excellent !
bon, à part que l'exemple traine les valeurs numériques qui lui sont propres
lol


magnifique

merci



--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
scraper
Bonjour Vincent Guichard, dans le message
news:44b50fff$0$862$
tu disais :

scraper a écrit :
Bonjour à tous !



Bonsoir.

Mis à part fermer, effacer et rouvrir le fichier (comme dit Fred), la
seule solution que je vois passe par l'API SetEndOfFile.
Malheureusement, cela implique probablement d'ouvrir, de lire,
d'écrire et de fermer le fichier à l'aide des fonctions de l'API
(CreateFile, ReadFile, WriteFile et CloseHandle) et non à l'aide des
fonctions VB6 (open, get, put et close).



oui, c'est ce qu'indique aussi Fred dans son dernier post ....
et ce que j'ai appliqué, finalement

ça fonctionne parfaitement, je te remercie également ;-)

j'aurais pensé qu'on puisse faire de même avec les fonctions VB .... :-(

dommage lol



--
Adresse invalide
Mon site : http://scraper.chez-alice.fr

scraper
Avatar
Fred
dans : news:%,
scraper écrivait :

Bonjour Fred, dans le message
news:
tu disais :

Dans : news:
Fred écrit :

L'API SetEndOfFile ?





ouiiiii ! lol

http://www.allapi.net/apilist/SetEndOfFile.shtml

(il y a un exemple)



excellent !
bon, à part que l'exemple traine les valeurs numériques qui lui sont
propres lol



Oui, j'avoue que je ne l'ai pas regardé dans le détail et encore moins
testé, n'ayant pas vb6 sous la main :-)
... Et je sais aussi que le nom de l'API te suffit pour retrouver le
reste ;-)

merci



De rien, bon fix !
Tu n'as plus qu'à proposer une amélioration à MS pour les prochaines
versions de vb.
Je sors lol.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
scraper
Bonjour Fred, dans le message
news:%
tu disais :

Oui, j'avoue que je ne l'ai pas regardé dans le détail et encore moins
testé, n'ayant pas vb6 sous la main :-)
... Et je sais aussi que le nom de l'API te suffit pour retrouver le
reste ;-)



vi, mais un peu trappu, dans le MSDN, come d'hab ;-)

l'exemple m'a fort aidé ;-)

merci



De rien, bon fix !



fini :-)

Tu n'as plus qu'à proposer une amélioration à MS pour les prochaines
versions de vb.



ah oui, ce qu'on pourrait appeller un "voeu pieux" lol lol


Je sors lol.



fais gaffe, selon où, tu as des orages en ce moment ;-)

amicalement




--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
1 2