Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1322 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  couper la fin d'un fichier

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

couper la fin d'un fichier

n°207239
drlobo
Posté le 02-09-2002 à 15:43:42  profilanswer
 

c'est surement tres con comme question, mais ca fait une bonne demi-heure que je cherche...
 
J'ai un fichier que j'ouvre en mode r+
un peu avant la fin du fichier j'écrit mes données qui doivent se trouver a la fin du fichier.Si elles sont plus longues que celles qui existent deja,pas de probleme.
Par contre si mes nouvelles données sont plus courtes,il va rester a la fin du fichier les anciennes données.
 
Comment couper le fichier a la fin des nouvelles données ecrites?
PS:je prefererai eviter de réécrire tout le fichier (il fais plusieurs Mo)

mood
Publicité
Posté le 02-09-2002 à 15:43:42  profilanswer
 

n°207282
Carbon_14
Posté le 02-09-2002 à 16:08:27  profilanswer
 

Je délire peut-être :
Le close() sur le fichier, il ne met pas le caractère EOF à la fin, où on vient d'écrire ?
Les données seront derrière sur le disque, mais la relecture devrait ne donner que ce qui a été écrit (? :pt1cable: ?). A tester...  
 
Sinon, dans le temps, il me semblait avoir vu écrire de force le caractère EOF (CTRL+Z ou ASCII 26, Cf http://support.microsoft.com/defau [...] ;Q253257&)
en binaire dans le fichier. Avec cette méthode, si la table d'allocation attend un fichier de 1Mo et qu'il y a EOF avant, ça fait désordre.

n°207290
LetoII
Le dormeur doit se réveiller
Posté le 02-09-2002 à 16:11:59  profilanswer
 

Non ça marche pas.
 
Je sais qu'avec l'API windows y a moyen de modifier la taille d'un fichier mais je sais pas si ça existe en C/C++ de base


Message édité par LetoII le 02-09-2002 à 16:12:08

---------------
Le Tyran
n°207295
prettysmil​e
Sourire est un devoir social
Posté le 02-09-2002 à 16:14:08  profilanswer
 

DrLobo a écrit a écrit :

c'est surement tres con comme question, mais ca fait une bonne demi-heure que je cherche...
 
J'ai un fichier que j'ouvre en mode r+
un peu avant la fin du fichier j'écrit mes données qui doivent se trouver a la fin du fichier.Si elles sont plus longues que celles qui existent deja,pas de probleme.
Par contre si mes nouvelles données sont plus courtes,il va rester a la fin du fichier les anciennes données.
 
Comment couper le fichier a la fin des nouvelles données ecrites?
PS:je prefererai eviter de réécrire tout le fichier (il fais plusieurs Mo)




et un truc du genre:  
ouvrir fichier en read
ouvrir un fichier tampon en w
recopie du fichier initial
 insertion de tes données
fermeture des fichiers
rename


Message édité par prettysmile le 02-09-2002 à 16:14:58
n°207305
drlobo
Posté le 02-09-2002 à 16:28:15  profilanswer
 

pour preciser la situation,ce que je veux faire c'est mettre a jour le tag lyric3(de taille variable qui se trouve juste avant le tagId3v1 a la fin du fiochier) d'un fichier mp3 et ce pendant la lecture de ce fichier par winamp.
 
A mon avis c'est possible de le faire sans réécrire des données(qui je le rapelle,sont en cours de lecture par winamp).J'arrivais a le faire en delphi (il suffisait de mettre la propriété fileSize a la bonne longueur).
 
c'est pour ca que j'aimerai eviter une méthode comme celle de prettysmile car ca interomprait la lecture de winamp

n°207311
LetoII
Le dormeur doit se réveiller
Posté le 02-09-2002 à 16:35:26  profilanswer
 

Si t sous windows cherche du côté de SetFilePointer et SetEndOfFile.


---------------
Le Tyran
n°207417
drlobo
Posté le 02-09-2002 à 17:27:11  profilanswer
 

ca marche avec SetEndOfFile
 

Code :
  1. HANDLE f=CreateFile(filename
  2.   GENERIC_WRITE,                // open for writing  
  3.   FILE_SHARE_READ,              // share for read access
  4.   NULL,                         // no security  
  5.   OPEN_ALWAYS,                  // open or create  
  6.   FILE_ATTRIBUTE_NORMAL,        // normal file  
  7.   0);            // no attr. template  
  8.  if (f != INVALID_HANDLE_VALUE) {
  9.   SetFilePointer(f,taille,NULL,FILE_BEGIN);
  10.   SetEndOfFile(f);
  11.   CloseHandle(f);


 
Merci :)

n°207419
LetoII
Le dormeur doit se réveiller
Posté le 02-09-2002 à 17:27:39  profilanswer
 

de rien


---------------
Le Tyran
n°207737
Carbon_14
Posté le 03-09-2002 à 08:42:35  profilanswer
 

Il y a aussi la fonction C (io.h) chsize (allonge fichier avec des \0 ou raccourcit).
Sous Win32 bits, à voir (ça semble utilisable d'après le fichier HLP).

n°207738
LetoII
Le dormeur doit se réveiller
Posté le 03-09-2002 à 08:44:59  profilanswer
 

carbon_14 a écrit a écrit :

Il y a aussi la fonction C (io.h) chsize (allonge fichier avec des \0 ou raccourcit).
Sous Win32 bits, à voir (ça semble utilisable d'après le fichier HLP).




 
Je la connaissais pas celle là, je prend note :D
 
EDIT: par contre niveau portabilité, ça exite sur les système UNIX? (c juste pour ma culture perso :D)


Message édité par LetoII le 03-09-2002 à 08:47:06

---------------
Le Tyran
mood
Publicité
Posté le 03-09-2002 à 08:44:59  profilanswer
 

n°207791
Carbon_14
Posté le 03-09-2002 à 10:14:10  profilanswer
 

Pour chsize, la portabilité est
DOS +
UNIX rien donc : non
Win16 +
Win32 +
ANSI C rien donc : non, itou
ANSI C++ rien
OS/2 +
 
Sous UNIX/Nunux, faudra trouver autre chose :) de même que pour remplacer SetEndOfFile(); .....

n°207794
LetoII
Le dormeur doit se réveiller
Posté le 03-09-2002 à 10:16:24  profilanswer
 

carbon_14 a écrit a écrit :

Pour chsize, la portabilité est
DOS +
UNIX rien donc : non
Win16 +
Win32 +
ANSI C rien donc : non, itou
ANSI C++ rien
OS/2 +
 
Sous UNIX/Nunux, faudra trouver autre chose :) de même que pour remplacer SetEndOfFile(); .....




 
C bien ce qu'il me semblait :D


---------------
Le Tyran
n°208368
Musaran
Cerveaulté
Posté le 04-09-2002 à 03:46:04  profilanswer
 

Sous Win95/NT aussi. Donc leur descendant aussi ?
Si on la trouve pas, penser à mettre un _ devant, comme souvent les choses non-standard.
 
Je ne connaît pas de manière standard de fixer la taille d'un fichier.
Ça a l'air con ? Ça l'est.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°208463
koulip31
Posté le 04-09-2002 à 11:48:16  profilanswer
 

carbon_14 a écrit a écrit :

Pour chsize, la portabilité est
DOS +
UNIX rien donc : non
Win16 +
Win32 +
ANSI C rien donc : non, itou
ANSI C++ rien
OS/2 +
 
Sous UNIX/Nunux, faudra trouver autre chose :) de même que pour remplacer SetEndOfFile(); .....




 
sous nunux le EOF n'est il pas un define de \0 ???
donc foutre un \0 en plein milieu de ton fichier reviendrais a le couper en 2 mais sa taille serrais pas retrecit :/ mais bon :? ya ptet un truc ke joublie :p

n°208465
LetoII
Le dormeur doit se réveiller
Posté le 04-09-2002 à 11:51:07  profilanswer
 

koulip31 a écrit a écrit :

 
 
sous nunux le EOF n'est il pas un define de \0 ???
donc foutre un \0 en plein milieu de ton fichier reviendrais a le couper en 2 mais sa taille serrais pas retrecit :/ mais bon :? ya ptet un truc ke joublie :p




 
Le EOF ça marche que pour certains editeurs de texte sui s'arrétent quand il trouvent se caractère c tout


---------------
Le Tyran
n°208822
erwan_oops
Posté le 04-09-2002 à 17:55:50  profilanswer
 

sous unix like il y a truncate()


---------------
la théorie c quant tout dois fonctionner mais rien ne marche                                 la pratique c quant tout marche mais personne ne c pourquoi                           ici on fais un bon compromis rien ne marche et personne ne c pourquoi :D
n°209029
Musaran
Cerveaulté
Posté le 05-09-2002 à 03:29:27  profilanswer
 

Le caractère EOF est obsolete.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°209085
Jar Jar
Intaigriste
Posté le 05-09-2002 à 09:35:01  profilanswer
 

Arrêtez votre délire avec EOF les gars, c'est un caractère qui n'existe pas.
Pour les fonctions qui retournent les caractères sous forme d'entiers, lesdits caractères vont de 0 à 255, et EOF vaut -1.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°209091
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 09:57:46  profilanswer
 

Jar Jar a écrit a écrit :

Arrêtez votre délire avec EOF les gars, c'est un caractère qui n'existe pas.
Pour les fonctions qui retournent les caractères sous forme d'entiers, lesdits caractères vont de 0 à 255, et EOF vaut -1.




 
Et -1 ce serait pas hazard: 0xFF ?
 
1) EOF existe.
2) Sa valeur dépend des système.


Message édité par LetoII le 05-09-2002 à 10:00:03

---------------
Le Tyran
n°209099
Jar Jar
Intaigriste
Posté le 05-09-2002 à 10:30:31  profilanswer
 

Mais bien sûr, comme ça quand tu lis un fichier binaire, il s'arrête en plein milieu parce qu'il trouve 0xFF.
 
Reprenons :
  255, c'est 0x000000FF
  EOF, c'est 0xFFFFFFFF
 
Une fonction qui retourne un char ne peut pas retourner EOF, c'est uniquement le cas si elle retourne un int.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°209102
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 10:47:23  profilanswer
 

Jar Jar a écrit a écrit :

 
...




 
T'as pas tout compris au film toi. EOF est un caractère conventionel pour désigner la fin d'un fichier TEXTE . Ca n'a rien à foutre dans un fichier binaire. C aussi pour ça que les éditeurs de textes qui cherchent se caractère afin de trouver la fin du texte s'arrétent en plein milieu d'un fichier binaire.


---------------
Le Tyran
n°209124
Carbon_14
Posté le 05-09-2002 à 11:16:22  profilanswer
 

La fonction retourne -1 pour dire "y a qq chose qui n'est pas normal", c'est pas pour ça que le caractère est -1. C'est un code d'erreur (fichier terminé).

n°209156
Jar Jar
Intaigriste
Posté le 05-09-2002 à 11:30:36  profilanswer
 

letoII a écrit a écrit :

T'as pas tout compris au film toi. EOF est un caractère conventionel pour désigner la fin d'un fichier TEXTE . Ca n'a rien à foutre dans un fichier binaire. C aussi pour ça que les éditeurs de textes qui cherchent se caractère afin de trouver la fin du texte s'arrétent en plein milieu d'un fichier binaire.


Il n'y a aucune différence entre texte et binaire. L'éditeur qui cherche la fin du texte dans un fichier binaire va trouver la fin du fichier binaire.
 
Tu en veux, un caractère 0xFF ? Tiens, c'est ÿ en iso-8859-1(5).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°209161
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 11:34:43  profilanswer
 

Jar Jar a écrit a écrit :

Il n'y a aucune différence entre texte et binaire. L'éditeur qui cherche la fin du texte dans un fichier binaire va trouver la fin du fichier binaire.
 
Tu en veux, un caractère 0xFF ? Tiens, c'est ÿ en iso-8859-1(5).




 
Ben si y a une différence pour le programme sui l'ouvre. Dans un texte typiquement tu trouve pas '\0' (0 ou encore 0x00). Y a certaine convesions (saut de ligne, tabulations, EOF..) Et si t'ouvre un fichier dit "binaire", c'est à dire ne respectant pas les convension du ficheir texte, ben à priori c du nimporte quoi pour l'éditeur de texte.


---------------
Le Tyran
n°209170
Jar Jar
Intaigriste
Posté le 05-09-2002 à 11:41:43  profilanswer
 

letoII a écrit a écrit :

Ben si y a une différence pour le programme sui l'ouvre. Dans un texte typiquement tu trouve pas '\0' (0 ou encore 0x00). Y a certaine convesions (saut de ligne, tabulations, EOF..) Et si t'ouvre un fichier dit "binaire", c'est à dire ne respectant pas les convension du ficheir texte, ben à priori c du nimporte quoi pour l'éditeur de texte.


La seule différence, c'est qu'il y a des caractères interdits, parce qu'ils ont une signification spéciale en ASCII : effacement, tabulation, changement de couleur... Mais le caractère 0xFF est parfaitement valide en ISO-8859-*, il ne signifie pas EOF. Il n'y a pas de caractère EOF.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°209174
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 11:45:17  profilanswer
 

Jar Jar a écrit a écrit :

La seule différence, c'est qu'il y a des caractères interdits, parce qu'ils ont une signification spéciale en ASCII : effacement, tabulation, changement de couleur... Mais le caractère 0xFF est parfaitement valide en ISO-8859-*, il ne signifie pas EOF. Il n'y a pas de caractère EOF.




 
 
j'ai pas dit que EOF avait une valeur variable plus haut? Ca dépend des os et des sytème, comme le reste d'ailleur (en particulier les retour de ligne). Putain boucher celui là! :fou:  
EOF existe (ou plutôt existait) et a été largement utilisé. Maintenent il l'est plus trop à ma connaissance.


Message édité par LetoII le 05-09-2002 à 11:46:37

---------------
Le Tyran
n°209224
Jar Jar
Intaigriste
Posté le 05-09-2002 à 13:20:52  profilanswer
 

letoII a écrit a écrit :

EOF existe (ou plutôt existait) et a été largement utilisé. Maintenent il l'est plus trop à ma connaissance.


Décidément, tu ne comprends rien à rien. Tu sais, tu peux reconnaître que tu ne sais pas, ce n'est pas une tare.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°209266
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 14:10:53  profilanswer
 

Jar Jar a écrit a écrit :

Décidément, tu ne comprends rien à rien. Tu sais, tu peux reconnaître que tu ne sais pas, ce n'est pas une tare.




 
Bon he tu sais quoi maych nulle, repartons chacun de notre côté avec nos certitudes et sans rancunes.
On va pas se faire chier pendant 107 ans pour 8 bits à la con.


---------------
Le Tyran
n°209270
MagicBuzz
Posté le 05-09-2002 à 14:16:04  profilanswer
 

Jar jar > T'es débile ?
 
EOF est un des premiers caractères qu'on trouve dans la table ASCII...

n°209271
MagicBuzz
Posté le 05-09-2002 à 14:17:48  profilanswer
 

http://users.cybercity.dk/~bse26236/batutil/ascii.htm
 
L'autre non de EOF est ETX pour "End Of Text"
 
Idem pour BOF qui s'appelle aussi STX.
 
Et EOF n'est présent que dans un fichier TEXTE.
 
Les fichiers binaires n'ont d'information sur leur taille que dans le système de fichiers.


Message édité par MagicBuzz le 05-09-2002 à 14:18:38
n°209272
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 14:20:42  profilanswer
 

MagicBuzz a écrit a écrit :

http://users.cybercity.dk/~bse26236/batutil/ascii.htm
 
L'autre non de EOF est ETX pour "End Of Text"
 
Idem pour BOF qui s'appelle aussi STX.
 
Et EOF n'est présent que dans un fichier TEXTE.
 
Les fichiers binaires n'ont d'information sur leur taille que dans le système de fichiers.




 
 :love: Merci vieu.
 
C moi qui étais pas clair ou quoi?


---------------
Le Tyran
n°209273
MagicBuzz
Posté le 05-09-2002 à 14:20:47  profilanswer
 

D'ailleurs, une petite correction...
 
ETX est OEF pour Unix, mais pour systèmes Microsoft, c'est SUB le code ASCII utilisé pour EOF.
 

Code :
  1. 26 1A SUB substitute. EOF.

n°209274
MagicBuzz
Posté le 05-09-2002 à 14:22:30  profilanswer
 

Et pour fixer la taille d'un fichier, c'est décrit là :
 
http://users.cybercity.dk/~bse2623 [...] ORT.HTM#A4
 
Par contre, c'est un bact MS-DOS.
 
Faudra donc transcrire pour en faire du C ;)

n°209276
MagicBuzz
Posté le 05-09-2002 à 14:23:28  profilanswer
 

letoII a écrit a écrit :

 
 
 :love: Merci vieu.
 
C moi qui étais pas clair ou quoi?




Nan c'est Jar Jar qui passe son temps à contredire tout le monde.
Alors forcément à un moment il ne peut que dire une connerie.
 
PS: Par contre, pour ton fichier, chuis pas sûr que ça puisse marcher, vu que les MP3 sont en binaire ;)
 
Essaie toujours

n°209277
Jar Jar
Intaigriste
Posté le 05-09-2002 à 14:26:24  profilanswer
 

Mais voilà que mon petit boulay perso vient m'expliquer comment marche un système de fichiers maintenant :love:


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°209284
MagicBuzz
Posté le 05-09-2002 à 14:32:10  profilanswer
 

Je crois qu'en effet, tu n'as pas bien compris comment ça marche.
 
Mon grand dieu aurait-il oublié ses cours ?

n°209301
Jar Jar
Intaigriste
Posté le 05-09-2002 à 14:51:16  profilanswer
 

:love:


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°209336
zion
Plop
Posté le 05-09-2002 à 15:55:39  profilanswer
 
n°209344
LetoII
Le dormeur doit se réveiller
Posté le 05-09-2002 à 16:33:58  profilanswer
 

zion a écrit a écrit :

[:blueflag]




 :??:


---------------
Le Tyran
n°209356
zion
Plop
Posté le 05-09-2002 à 16:42:47  profilanswer
 

Benh ouai, ca se tappe dessus, je veux lire la suite du topic  :ange:


---------------
Informaticien.be - Lancez des défis à vos amis
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  couper la fin d'un fichier

 

Sujets relatifs
[mySQL] Soucis avec un fichiercomment executer un fichier sql en asp
Produir la fichier war d'une webappVerifier qu un fichier existe sur une url distante
[C++] Comment recuperer un fichier en local par http?? [RESOLU]Est t'il possible d'appliquer un style a un fichier JS
[PHP] un code qui permet d'uploader un fichier qqpart d'après un form.Copie d'un fichier Excel à un autre
Y'a pas 1 commande DOS qui me permettrait de couper mon fichier ??Couper un gros fichier en petits
Plus de sujets relatifs à : couper la fin d'un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR