deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 2016
-
18 janv. 2006 à 16:43
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 2016
-
18 janv. 2006 à 19:40
Bonjour,
Voila j'ai un problème , j'ai fait une partie de programme qui est
chargé d'allouer juste assez de mémoire a un pointeur de type
char pour acceuillir le contenut d'un fichier (sachant que 1 caractères
= 1 octet). Cet ensemble d'instrustion fonctionne très bien... enfin il
y a un petit hic!. Je père un octet à chaque retour a la ligne dans le
fichier.
Je m'explique
exemple un fichier contenant :
Bonjour
ceci est un test
tout simplement
Il y a 2 retour a la ligne et bien j'alloue 2 octet en trop. Cela n'est
pas trop grave pour les petit fichier, mais lorsque l'on arrive a des
gros fichier de 123Mo ca fait bcp en trop.
Donc je voulait savoir si il n'y a pas une formule magique :D, une API,
que sais-je qui permettrai de savoir combien de retour a la ligne il y
a. Ou alors un autre code permettant de faire ce que je souhaite :p.
Car bon je peut savoir combien de retour a la ligne il y a mais en
lisant le fichier caractère par caractère et bon c'est pas une bonne
optimisation :p.
Voici mon code au cas ou:
int main(int argc, char *argv[]){
WIN32_FILE_ATTRIBUTE_DATA w32fad;
FILE *fichier;
char D_szFilePath[MAX_PATH];
char D_szPhrase[400];
char *D_ptText;
int D_lFileSize;
printf("\n Introduisez le nom du fichier et le chemin de celui-ci :_");
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 18 janv. 2006 à 17:40
rrk275 : entièrement daccord avec toi, mais c'est le mode binaire. Hors
ici c'est des fichier "texte"(écrit par un utilisateur) et non dans
structure ou autre.
Arnotic : oui je venai de comprendre le pourquoi je croyai avoir faut.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 18 janv. 2006 à 18:16
si tu ouvre un fichier en mode texte, les retours chariot \r\n du fichier seront transformés en \n => un octet de moins par ligne.
si tu l'ouvre en binaire, cette conversion n'a pas lieu et tu récupère tout le fichier.
C'est la seule différence entre les 2 modes d'ouverture.
Pour moi il est préferrable de l'ouvrir en binaire, tu sera sur qu'une couche intermédiaire ne t'enlèbe pas des octets...
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 18 janv. 2006 à 19:00
Bon ça marche now, mais hum il ne me met pas la fin du fichier (il me
manque quelques mot) et aussi il me met le nom du fichier tout a la fin
:s . Est ce du a l'entete?
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 18 janv. 2006 à 19:39
pour la vérification d'ip , j'avai fait le programme en VB6 (et oui j'était un vbtiste me frappé pas :p ).
Voici le code cela pourra p-e t'aider. Il est très simple a comprendre.
Ne te préocupe pas des label et autre, juste sur la vérification . Je
t'ai mit d'ailleur juste la procédure qui calcule les classes.
code :
Private Sub Command1_Click()
Dim no_ip As Integer
no_ip = Val(Textip1.Text)
If Textip1.Text "" Then Textip1.Text 0
If Textip2.Text "" Then Textip2.Text 0
If Textip3.Text "" Then Textip3.Text 0
If Textip4.Text "" Then Textip4.Text 0
If no_ip > 0 And Val(Textip2.Text) <= 255 And Val(Textip3.Text)
<= 255 And Val(Textip4.Text) <= 255 Then 'Condition d'acceptation
If no_ip >= 1 And no_ip <= 126 Then 'Ip de classe A
Labelipclass.Caption = "A"
Labelmasqsr.Caption = "255.0.0.0"
Labelpriv.Caption = "non"
Labelpriv.ForeColor = &H0&
End If
If no_ip >= 127 And no_ip <= 191 Then 'Ip de classe B
Labelipclass.Caption = "B"
Labelmasqsr.Caption = "255.255.0.0"
Labelpriv.Caption = "non"
Labelpriv.ForeColor = &H0&
End If
If no_ip >= 192 And no_ip <= 213 Then 'Ip de classe C
Labelipclass.Caption = "C"
Labelmasqsr.Caption = "255.255.255.0"
Labelpriv.Caption = "non"
Labelpriv.ForeColor = &H0&
End If
If no_ip >= 224 And no_ip <= 239 Then
Labelipclass.Caption = "D (MULTICAST)" 'Ip de classe D
Labelmasqsr.Caption = "255.255.255.255"
Labelpriv.Caption = "non"
Labelpriv.ForeColor = &H0&
End If
If no_ip >= 240
Then
'Ip de classe E
Labelipclass.Caption = "E"
Labelmasqsr.Caption = "255.255.255.255"
Labelpriv.Caption = "oui (RESERVE)"
Labelpriv.ForeColor = &HFF&
End If
If no_ip 255 Or Val(Textip2.Text) 255 Or
Val(Textip3.Text) 255 Or Val(Textip4.Text) 255 Then 'Broadcast