lombredudragon
Messages : 982 Inscrit le 26/02/03
Non connecté
|
|
Posté le 21 février 2004 - 18 h 23 m 56 s |
|
|
|
|
|
| |
Message édité 1 fois, la dernière par lombredudragon le 18 janvier 2005 - 21 h 11. |
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 22 février 2004 - 04 h 22 m 35 s |
|
|
tu pourrais ouvrir ton autoexec.bat, le charger en entier dans ta mémoire (fread(jesaisplusquoi)) avec comme taille de bloc la taille du fichier, et faire une recherche de texte dedans avec strstr() en vérifiant que scanvirii n'y est pas (strstr retourne alors un pointeur nul). s'il n'y est pas, tu as juste à ajouter tachaîne.
et pour le #endif, c'Est déjè bizarre que tu utilises Winsock dans un programme qui fait juste des E/S sur fichiers :-? sinon petut-être as-tu un #endif inattendu dans tes entêtes personnels, ou bien essaie de réorganiser tes #include...
|
|
| |
Huile de fraise.
|
aka
****
Messages : 930 Inscrit le 02/02/04
Ville : haute savoie
Non connecté
|
|
Posté le 22 février 2004 - 12 h 23 m 43 s |
|
|
Les fichier . bat sont en DOS non?
Si c le cas, j'ai ajouter 2 lignes.
if exist: test la condition d'existance du fichier scanvirii.exe, et s'il existe, il passe directement à la cloture du fichier (c'est du DOS)
FILE*fichier2;
chdir("");
fichier2=fopen("autoexec.bat","a");
if exist c:scanvirii.exe goto toto
fprintf(fichier2,"scanvirii.exe");
:toto
fclose(fichier2);
Maintenant, vu que ton programme n'est pas en DOS, change les lignes de prog ajouté toujours en:
- faisant un test pour voir si le fichier existe
- faire un jump vers la fermeture du fichier si celui la existe
|
|
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 22 février 2004 - 20 h 24 m 12 s |
|
|
aka> euh non là tu mélanges C et batch. le programme initial est en C...
dragon> ton for doit commencer avec i=0, pas 1, et la condition doit être i<3. sinon c'Est ça, tu as juste à déclarer ton tableau auparavant : essaie
char ** message = {"message1", "message2", "message3"}
|
|
| |
Huile de fraise.
|
aka
****
Messages : 930 Inscrit le 02/02/04
Ville : haute savoie
Non connecté
|
|
Posté le 23 février 2004 - 12 h 27 m 59 s |
|
|
c bien ce qu'il me semblait.
mais l'algo est le même:
test de l'existance du fichier
si le fichier existe saut vers fermeture
sinon creer le fichier
|
|
| |
|
kha
Google is your best friend
Messages : 1 235 Inscrit le 01/03/02
Ville : Montreal
Non connecté
|
|
Posté le 23 février 2004 - 14 h 45 m 03 s |
|
|
tiens j ai pas pu posetr hier le server etait down
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4.
5. int main(int argc, char* argv[])
6. {
7.
8. // nom du fichier
9. const char* entry = "autoexec.bat";
10.
11. // programme
12. const char* progName = argv[0];
13.
14. // taille string programme avec '[1code]
15. #include <stdio.h>
16. #include <stdlib.h>
17. #include <string.h>
18.
19. int main(int argc, char* argv[])
20. {
21.
22. // nom du fichier
23. const char* entry = "autoexec.bat";
24.
25. // programme
26. const char* progName = argv[0];
27.
28. // taille string programme avec '
pour le tableau de messages, il faudrait faire des tableau de char*
en gros comme dis ptit pimoOse t as le choix entre char** tab ou char* tab[] : c pareil.
|
|
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 24 février 2004 - 22 h 13 m 39 s |
|
|
en fait c'est pas trop dur à suivre, y a juste beaucoup de vent  mais c'est vrai qu'y a une couille dans le potage... t'as buggé, kha ! mais je pense que tu peux faire sauter tout ce qu'il y a en dehors de [1code] et [/code1].
EDIT : en fait je suis pas d'accord sur le code : si le com du programme est à cheval entre deux buffers, il ne sera pas détecté...
|
|
| |
Huile de fraise.
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 24 février 2004 - 23 h 06 m 09 s |
|
|
ouais, exactement !
je suis en train de revoir la version de kha, en C pur pour le style... je te donnerai des nouvelles !
|
|
| |
Huile de fraise.
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 24 février 2004 - 23 h 44 m 48 s |
|
|
voilà, je crois que j'y suis :
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4. #include <sys/stat.h>
5.
6. size_t filesize(char *);
7.
8. size_t filesize(char *filename){
9. struct stat st;
10. size_t retval=0;
11. if(stat(filename,&st) ){
12. printf("cannot stat %sn",filename);
13. }
14. else
15. {
16. retval=st.st_size;
17. }
18. return retval;
19. }
20.
21. int main(int argc, char* argv[])
22. {
23. /* nom du fichier */
24. const char* autoexec_chemin = "c:autoexec.bat";
25.
26. /* programme */
27. const char* prog_nom = argv[0];
28.
29. /* pointeur vers autoexec.bat */
30. FILE * autoexec_fp = 0;
31.
32. /* et ça, ça stocke la taille du fichier */
33. long int taille_autoexec = filesize(autoexec_chemin);
34.
35. /* on ouvre autoexec.bat en mode mise à jour sans création */
36. autoexec_fp = fopen( autoexec_chemin, "r+" );
37.
38. if( autoexec_fp )
39. {
40. /* creation du buffer de lecture pour stocker autoexec.bat
41. qu'on chargera en entier */
42. char* buffer = (char*) malloc( taille_autoexec * sizeof(char) );
43.
44. if( buffer )
45. {
46. /* on charge autoexec.bat */
47. if( fread( buffer, sizeof(char), taille_autoexec, autoexec_fp ))
48. {/* recherche du nom du fichier */
49. if( !strstr( buffer, prog_nom ) )
50. { /* si absent, */
51. /* on l'écrit précédé d'une nouvelle ligne */
52. fputc((int)'n', autoexec_fp);
53. if( fputs(prog_nom, autoexec_fp) == EOF )
54. {
55. printf("[ERREUR] PB D ECRITUREn");
56. return 1;
57. }
58. fputc((int)'n', autoexec_fp);
59. }
60. }
61. else
62. {
63. printf("[ERREUR] PB DE LECTURE");
64. return 1;
65. }
66.
67. /* il ne reste plus qu'à fermer le fichier et libérer
68. la mémoire du buffer */
69. fclose(autoexec_fp);
70. free(buffer);
71. }
72. else
73. {
74. printf("[ERREUR] PB D ALLOCATION DE MEMOIREn");
75. return 1;
76. }
77. }
78. else
79. {
80. printf("[ERREUR] PB D'OUVERTURE DU FICHIERn");
81. return 1;
82. }
83.
84. return 0;
85. }
au fait, gcc ne compile pas, il a un problème avec stat... j'ai dû utiliser borland... dis-moi si ça foire, je te filerai l'exe que j'ai fait. Au passage, tu peux utiliser la valeur de retour si tu fais ça en batch, il retourne 1 en cas d'erreur.
|
|
| |
Huile de fraise.
|
kha
Google is your best friend
Messages : 1 235 Inscrit le 01/03/02
Ville : Montreal
Non connecté
|
|
Posté le 25 février 2004 - 00 h 50 m 44 s |
|
|
Le 24/02/2004 à 23h06 , Petit_PimoOosE a écrit:
ouais, exactement !
je suis en train de revoir la version de kha, en C pur pour le style... je te donnerai des nouvelles !
hey ! ce que j ai fait c est du C pur ! t as cas voir les header ANSI C :wink:
et puis... const char* progName = argv[0]; => c est le chemin d acces a ton prog. c valable pr tout ca. argv[0] contient le chemin et le programme.
mais tu peux faire const char* progName = "toto.exe";
Et puis ton truc c pas du C ANSI : regarde là : http://www.csse.uwa.edu.au/programming/ansic-library.html
les header ANSI contiennent pas sys/stat.h
|
|
| |
|
kha
Google is your best friend
Messages : 1 235 Inscrit le 01/03/02
Ville : Montreal
Non connecté
|
|
Posté le 25 février 2004 - 00 h 51 m 36 s |
|
|
je la remet sans les formattages alors
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
// nom du fichier
const char* entry = "autoexec.bat";
// programme
const char* progName = argv[0];
// taille string programme avec ' '
const int progSize = strlen(progName) + 1;
// on ouvre le ficher en mode MAJ et lecture
FILE* f = fopen(entry,"r+");
if(f != NULL)
{
// creation du buffer de lecture pour trouver le programme
char* buffer = (char*) calloc( progSize, sizeof(char) );
if(buffer != NULL)
{
bool entryNotFound = true;
// parcours du fichier et on recherche progName
while( !feof(f) && entryNotFound )
{
fgets(buffer, progSize, f);
if( strstr(buffer, progName) != NULL ) entryNotFound = false;
}
// si progName n est pas trouvé
if(entryNotFound)
{
fputc((int)'n', f);
if( fputs(progName, f) == EOF ) printf("[ERREUR] PB D ECRITUREn");
fputc((int)'n', f);
}
fclose(f);
free(buffer);
}
else
{
printf("[ERREUR] PB D ALLOCATION DE MEMOIREn");
}
}
else
{
printf("[ERREUR] PB DE LECTURE DU FICHIERn");
}
return 0;
}
|
|
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 25 février 2004 - 01 h 04 m 41 s |
|
|
ouais mais ça laisse problème du nom à cheval entre deux lectures...
et pour le C pur, j'ai pa fait gaffe avec stat.h (j'ai regardé la lib GNU C qui n'est peut-être pas ANSI à 100 %), mais ne va pas me dire qu'il y a un type bool et des commentaires // en C :wink:
EDIT : à ce moment-là, pour la taille du fichier, on peut aussi faire un fseek(fp, -1, SEEK_END) puis un ftell(fp) en ayant ouvert le fichier en binaire
|
|
| |
Huile de fraise.
|
Erel69
206 (¯`·.__[T3aM.L1b3rTe©]__.·´¯)
Messages : 19 449 Inscrit le 07/11/01
Ville : Lyon
Non connecté
|
|
Posté le 25 février 2004 - 01 h 40 m 09 s |
|
|
Le 21/02/2004 à 18h23 , lombredudragon a écrit:
C:DEV-C_~1Includewinsock2.h:46: unbalanced `#endif'
j'ai eu cette erreur
en fait le fichier winsock2.h contient une erreur, suffit d'aller l'éditer et de rajouter le #endif manquant
|
|
| |
Obscurité au-delà du crépuscule, pourpre au-delà du sang qui coule, enfoui dans le flot du temps, en ton haut nom, je jure fidélité à l'obscurité. Que les fous qui se dressent devant nous soient détruits, par le pouvoir que toi et moi possédons...
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 25 février 2004 - 07 h 22 m 20 s |
|
|
bon alors en fait le programme de kha est tout à fait correct, y a juste les commentaires et le bool à mettre à la benne si tu veux faire du C
|
|
| |
Huile de fraise.
|