Voila en ce moment la je travaille sur un projet qui consiste a :
Vérifiez la mémoire vive du système, à partir de là déterminer la taille maximale des fichiers qu'il peut gérer. (suggérer 10-20% de la fréquence max de RAM) Si le fichier est plus grand que la taille de fichier maximale, fractionnés automatiquement en fichiers temporaires et les utiliser.
donc voici la demarche:
Ouvrir le fichier
Vérifier la quantité de lignes définissent comme [lignes]
Crée un tableau [lignes]
Chargez toutes les urls dans un tableau
fermer le fichier
split.c :
split.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 / * split.c accueillera les fonctions pour découper les fichiers d'entrée qui sont trop grands. Cela devrait garder l'utilisation de la mémoire faible. Taille du fichier(FileSize) max est déterminé par l'entrée d'utilisateur (-m 4096) ou par le programme lui-même s'il n'est pas spécifié * / #include <split.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> int fileSize ( char File[] ); //int pour stocker la taille du fichier void fileNameExt ( char Name[], char Ext[], char File[] ); int splitmain( int argc, char *argv[] ) //méthode principale { FILE *source, *destination; //définir source et la destination des pointeurs de fichiers int size, parts; //int pour la taille du fichier de sortie et la quantité de fichiers de sortie char name[100], ext[100], aux[100]; if( argc < 3 ) //vérifier combien de args ont été entrés { printf( "Il n'y a pas suffisamment de args!" ); system( "pause" ); return 0; } fileNameExt( name, ext, argv[1] ); parts = atoi( argv[2] ); size = fileSize( argv[1] ); //taille variable = filesize de arg1, le fichier d'entrée. if( (source = fopen(argv[1], "rb")) == NULL ) //si fopen renvoie NULL le fichier n'est pas présent, les fichiers vides commence par \ n? { printf( "Erreur! Fichier source n'a pas pu être ouvert!" ); system( "pause" ); return 0; } for( int i = 0; i < parts; i++ ) //jusqu'à int i est le même que les parties int, boucle. sprintf( aux, "%s%s-%d", name, ext, i ); printf( "Generating %s file! -- ", aux ); if( (destination = fopen(aux, "wb")) == NULL ) //si le fichier de destination fopen renvoie NULL alors il n'ya pas de sortie { printf( "Errer! fichier de destination %s n'a pas pu etre cree!", aux ); system( "pause" ); return 0; } char car = getc( source ); for( int j = 0; j < size/parts && !feof(source); j++ ) { putc( car, destination ); car = getc( source ); } printf( "OK! " ); fclose( destination ); } fclose( source ); system( "pause" ); return 0; } int fileSize( char File[] ) //calculer la taille du fichier { FILE *f; //initier pointeur du fichier if( (f = fopen(File,"rb")) == NULL ) //si fopen renvoie NULL le fichier n'est pas présent, les fichiers vides commence par \n? { printf( "Erreur! Fichier source n'a pas pu être ouvert!" ); system( "pause" ); return 0; } fseek( f, 0,SEEK_END ); int sz = ftell(f); fclose( f ); return sz; } void fileNameExt( char Name[], char Ext[], char File[] ) { char *aux; if( (aux = strrchr(File, '')) == NULL ) { if( (aux = strrchr( File, '/' )) == NULL) { aux = File; } } if( aux != File ) { aux++; } for( int i = 0; *aux != '.'; i++, aux++ ) { Name[i] = *aux; Name[i+1] = '\0;'; } for( int i = 0; *aux != '\0;'; i++, aux++ ) { Ext[i] = *aux; Ext[i+1] = '\0'; } }
defhaze.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #ifndef SPLIT_H_INCLUDED #define SPLIT_H_INCLUDED /* Prototypes des fonctions */ /* split main() */ int splitmain( int argc, char *argv[] ); /* calculer la taille de fichier */ int fileSize( char File[] ); /* */ void fileNameExt( char Name[], char Ext[], char File[] ); #endif
voila mon probleme cest que je trouve que mon code est un peu mal structure et incomplet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 #include <conio.h> #include <dos.h> #include <process.h> #include <stdio.h> #include <split.h> int main(int argc, char *argv[]) { printf(" /*****Bienvenu a De(f)haze*****\ \n"); printf(" | | \n"); printf(" | Fait par Luloo | \n"); printf(" | | \n"); printf(" | | \n"); printf(" \*****--------------------*****/ \n"); int suc6 = 0; loadfile(); return 0; } int loadfile() //Méthode pour charger le fichier d'entrée dans un tableau { inputfile = ; //attribuer une valeur à fichier d'entrée FILE *fpinput; //définir pointeur du fichier d'entrée fpinput=fopen(&inputfile, r); //ouvrir le fichier d'entrée avec mode "r", lecture seule(read only) //fp = fopen("filename.txt", "r"); printf("Le comptage et la collecte des urls ... \n"); while((fgets(fp)) != NULL) //tandis que la rangée / ligne ne renvoie pas NULL (espace ou \n !=NULL), urls++ { urls++; } return 0; } for(int i=0; i<urls; i++) //tandis que i est inférieur au montant des urls, tourne en boucle fscanf(fp, "%d %s\n", &UrlArr[i]); //ajouter une ligne au tableau fclose(fpinput); //fermez le fichier puisque les urls sont déjà dans le tableau } /* Méthode Append ajoutera les injections réussies dans le fichier de sortie si dans le cas d'un crash ou quoi que vous aurez toujours vos injections réussies */ int apppend() { FILE *fpoutput; //définir pointeur du fichier de sortie fpoutput = fopen("output.txt", "a"); //Inclure dans le fichier de sortie if (suc6 <1) { struct date d; getdate(&d); fwrite("fpoutput", "De(f)haze started [%d/%d/%d",d.da_day,d.da_mon,d.da_year]\n"); fwrite("fpoutput", "Codee par Luloo \n"); } }
donc en gros, jaimerai avoir quelques idees concernant l'optimisation de mon code et si possible corriger quelques fautes
Partager