Salut , j'ai récemment entamé la réalisation d'un " Patcheur de Client". un petit programme qui sert a appliquer des patch sur les ressources d'un jeu.
J'ai rencontré pas mal de problèmes, plus syntaxique que logiques, et de ce fait j'ai du entre << tourner autour de l'objet pour faire en sorte que ca se passe comme je veut (utilisation de constante pour remédier a des indexes out of bounds)
Bon, Donc si quelqu'un a un peu de temps, j'aimerais avoir des tips, pour optimiser mon code pour que ca run plus rapidement bien sure mais aussi que ce soit plus vite. ne vous fatiguer pas, juste ce qui est trés connu !
Mais avant, j'ai deux-3 questions importantes :
1.J'ai une Forme (GUI) et mon programme dans d'autre classes/unités.
J'aimerais que mon programme ne commence a s'exécuter qu'après que toutes les membres de la forme soit chargé et visible.
Dans quel événement dois je poser mon programme ? j'ai essayé le Shown, mais ca commence apres le chargement de FORM1 Tout seul, sa n'attend pas les autres.
2.J'ai une question sur le comportement de StreamWriterInstance.ReadToEnd.
Ca m'a l'air correcte mais ce n'est pas le cas, a la fin je ne retrouve que le Dernier évènement, et non pas les évènement précèdent + le nouvel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //EVENT LOG Entry File.CreateText(Application.StartupPath + @"\event_log.txt").Close(); StreamReader logevent1 = new StreamReader(Application.StartupPath + @"\event_log.txt"); String tempText = logevent1.ReadToEnd(); logevent1.Close(); tempText += logwut; StreamWriter logevent = new StreamWriter(Application.StartupPath + @"\event_log.txt"); logevent.Write(tempText);
pourtant d'après mon code, je met tout le fichier dans un string temporaire et j'ajoute un "messageici \n"
3.J'ai une joli progress bar que je n'arrive pas a faire marcher.
j'espérerais qu'a .NET, le pays des merveilles et des choses faciles qu'on devait juste la rattacher a une méthode
mais ce n'est pas le cas. j'aimerais y mettre par exemple le progrès d'un telechargement. si quelqu'un pouvait m'éclairer.
Bon sinon pour la fin, voila mes deux petites feuilles :
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; using System.Windows.Forms; namespace PATCHERV3 { public class Patch { public Patch(string IDZ, string INDEXZ, string COMEN) { int a = 0, b= 0; string c; a = int.Parse(FILEIO.Patch_Params[0]); //ID Set ok! if (FILEIO.Patch_Params[1].ToString().ToLower().Trim() == "server") b = 0; else if (FILEIO.Patch_Params[1].ToString().ToLower().Trim() == "images") b = 1; else if (FILEIO.Patch_Params[1].ToString().ToLower().Trim() == "sprite") b = 2; else System.Windows.Forms.MessageBox.Show("Critical : Tell Rehael to fix this mess quickly at \n <a href="mailto:a.rehael@gmail.com">a.rehael@gmail.com</a> use MSN or email", "CRITICAL ERROR", MessageBoxButtons.OK); //Index Set OK! c = FILEIO.Patch_Params[2]; PatchIt(b); LogItin(a,LogIt(a,c)); } static void PatchIt(int index) //Constructor { //Stored ID for log entry. //Starting index treatement. String filename = null; switch (index) { case 0: { filename = "server.bin"; break; } case 1: { filename = "images.bin"; break; } case 2: { filename = "sprite.bin"; break; } } WebClient dlfile = new WebClient(); Uri url = new Uri("http://valiantro.com/vpatch/" + filename); dlfile.DownloadFile(url, Application.StartupPath + @"\grf\" + filename); } static string LogIt(int IDa, string commentaire) { String Entry = "#" + IDa + " : " + commentaire+"\n"; return(Entry); } static void LogItin(int IDb,string logwut) { File.Delete(Application.StartupPath + @"\pdata\id.bin"); StreamWriter refreshID = new StreamWriter(Application.StartupPath + @"\pdata\id.bin"); refreshID.WriteLine(IDb.ToString()); refreshID.Close(); //ID UPDATED //EVENT LOG Entry File.CreateText(Application.StartupPath + @"\event_log.txt").Close(); StreamReader logevent1 = new StreamReader(Application.StartupPath + @"\event_log.txt"); String tempText = logevent1.ReadToEnd(); logevent1.Close(); tempText += logwut; StreamWriter logevent = new StreamWriter(Application.StartupPath + @"\event_log.txt"); logevent.Write(tempText); logevent.Close(); } } }Merci beaucoup !
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 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; using System.Windows.Forms; namespace PATCHERV3 { public static class FILEIO { //Settings public static string[] CRCs = new string[4]; public static bool Allow_Patch = true; //Variables public static string[] Patch_Params = new string[3]; //Methods static int returnID() { if (!File.Exists(Application.StartupPath + @"\pdata\id.bin")) { StreamWriter id_wr = new StreamWriter(Application.StartupPath + @"\pdata\id.bin"); id_wr.Write("0"); id_wr.Close(); return 0; } else { StreamReader id_rd = new StreamReader(Application.StartupPath + @"\pdata\id.bin"); String TempS = id_rd.ReadLine(); id_rd.Close(); return(int.Parse(TempS)); } } public static void read_settings() { String file_path = Application.StartupPath + "\\pdata\\setting.cfg"; RefreshData.downloadfiles(); StreamReader set_rd = new StreamReader(file_path); for (Int16 n = 1; n <= 2; n++) { String Temp_Setting = set_rd.ReadLine(); Temp_Setting = Temp_Setting.Substring(Temp_Setting.IndexOf("=") + 1).Trim().ToLower(); //Selects setting only. switch (n) { case 1: { if (Temp_Setting == "false") Allow_Patch = false; break; } case 2: { CRCs[0] = Temp_Setting; break; } //Sets CRC For Client. } } set_rd.Close(); //Closed. } //First Method to start public static void read_plist() { StreamReader Plist = new StreamReader(Application.StartupPath + @"\pdata\patchlist.php"); String Temp_String = "no patch"; while (true) { try{ Temp_String = Plist.ReadLine().Trim(); }catch{break;} if (int.Parse(Temp_String.Substring(1, Temp_String.IndexOf(",") - 1)) > returnID()) { Patch_Params[0] = Temp_String.Substring(1, Temp_String.IndexOf(",") - 1); //Setting ID param Patch_Params[1] = Temp_String.Substring(Temp_String.IndexOf(",") + 1, 6); //Setting Index String Patch_Params[2] = Temp_String.Substring(Temp_String.IndexOf(":") + 1);//Comment param } else break; Patch patch1 = new Patch(Patch_Params[0], Patch_Params[1], Patch_Params[2]); } Plist.Close(); } // Second Method } static class RefreshData { public static void downloadfiles() { String path = Application.StartupPath + @"\pdata"; try { Directory.CreateDirectory(path); } catch { MessageBox.Show("Not Enough Rights, use administrator account", "Rights Error !", MessageBoxButtons.OK, MessageBoxIcon.Error); } if (File.Exists(Application.StartupPath + "\\setting.cfg") || File.Exists(Application.StartupPath + "\\patchlist.txt")) { File.Delete(Application.StartupPath + "\\patchlist.txt"); File.Delete(Application.StartupPath + "\\setting.cfg"); } WebClient dl_files = new WebClient(); String url = "http://valiantro.com/vpatch/"; Uri uri = new Uri(url + "setting.cfg"); dl_files.DownloadFile(uri, path + "\\setting.cfg"); uri = new Uri(url + "patchlist.php"); dl_files.DownloadFile(uri, path + "\\patchlist.php"); dl_files.Dispose(); } } }
Partager