Aller au contenu

Leaderboard

Popular Content

Showing content with the highest reputation on 02/01/2015 in all areas

  1. Comme vous le savez surement, le framework .NET est une immense collection de classes que nous, les développeurs, utilisons pour créer nos programmes. Le framework est divisé en plusieurs Namespace, celui que nous utiliserons dans ce tutoriel est System.IO.Compression. Il vous faudra donc ajouter deux références (Explorateur de solution -> Références -> Ajouter Référence) Puis vérifiez que les références ont bien été ajoutées: Maintenant il ne vous reste plus qu'a ajouter un using tout en haut de votre code: using System.IO.Compression; (Nous utiliserons aussi les namespaces System et Sytem.IO) Pour commencer, nous avons les fonctions de la classe statique ZipFile : -Prend tout les fichiers contenus dans le dossier "folder", puis les compresses dans le fichier "compressed.zip" ZipFile.CreateFromDirectory("folder", "compressed.zip"); Avec l'enumeration CompressionLevel, il est possible d'optimiser la compression, sois pour la vitesse, sois pour la taille du fichier. -Extrait les fichiers contenus dans le fichier "compressed.zip" vers le dossier "folder" ZipFile.ExtractToDirectory("compressed.zip", "folder"); Ces deux fonctions ont une surchage qui prend en compte l'encodage, l'encodage de base est UTF-8 donc si vous avez besoin d'un encodage différent, il vous suffit de le passer en paramètre. Maintenant passons au choses un peu plus complexes, la classe ZipArchive vas nous permettre d'avoir plus de contrôle sur notre archive. Cette classe implémente IDisposable, il faut donc l'entourer d'un bloc "using", ou manuellement appeler Dispose() quand vous avez fini de l'utiliser. Tout d'abord, pour créer une instance ZipArchive, il faut ouvrir un Stream qui va nous permettre de lire le fichier. Cet exemple ouvre le fichier "test.zip". affiche le nom de tout les fichiers ainsi que le ratio de compression: using (Stream fs = File.OpenRead("test.zip")) using (var archive = new ZipArchive(fs, ZipArchiveMode.Read)) foreach (ZipArchiveEntry entry in archive.Entries) Console.WriteLine("{0} : {1}%", entry.Name, Math.Ceiling((double)entry.CompressedLength / (double)entry.Length * 100)); La classe ZipArchive nous permet de créer, de lire et aussi de mettre a jour des archives ZIP. -Création: ZipArchive archive = ZipFile.Open("name.zip", ZipArchiveMode.Create); -Lecture: ZipArchive archive = ZipFile.Open("name.zip", ZipArchiveMode.Read); // equivalent ZipArchive archive = ZipFile.OpenRead("name.zip"); -Mise a jour: ZipArchive archive = ZipFIle.Open("name.zip", ZipArchiveMode.Update); Dans l'archive, chaque fichier est représenter par une ZipArchiveEntry, qu'on peut obtenir grâce a la proprietee Entries de la classe ZipArchive. On peut récupérer un objet ZipArchiveEntry en choisissant un existant: var entry = archive.GetEntry("file.txt"); Ou en créant une nouvelle: var entry = archive.CreateEntry("file.txt"); La classe ZipArchiveEntry contient des propriétés publiques qui exposent des informations a propos du fichier (nom, taille (et taille après compression), date de la dernière écriture ...) Elle contient aussi plusieurs fonctions tel que Delete (supprime le fichier de l'archive) et ExtractToFile(extrait le fichier compressé vers un fichier décompressé hors de l'archive). La fonction Open revois un objet Stream, qui va nous permettre de modifier directement le contenu du fichier. Exemple qui créé une archive "test.zip", et qui y ajoute le fichier "foo.txt". (c'est possible de le faire plus facilement en utilisant archive.CreateEntryFromFile, mais je vais utiliser cet exemple pour vous montrer comment utiliser l'objet Stream): using (ZipArchive archive = ZipFile.Open("test.zip", ZipArchiveMode.Create)) { var entry = archive.CreateEntry("foo.txt"); using (Stream s = entry.Open()) { byte[] data = File.ReadAllBytes("foo.txt"); s.Write(data, 0, data.Length); } } // Reouvre l'archive pour confirmer que le fichier est bien la, et affiche sa taille. using(ZipArchive archive = ZipFile.OpenRead("test.zip")) { var entry = archive.GetEntry("foo.txt"); Console.WriteLine("Name: {0}\r\nOriginalSize: {1}\r\nCompressedSize: {2}", entry.Name, entry.Length, entry.CompressedLength); } Je pense avoir fait le tour du sujet, j’éditerais peut être avec une section a propos de la classe GZipStream (qui permet de compresser/décompresser en mémoire, sans fichiers). Je vais aussi écrire un petit tool qui permetra de gérer les fichiers ZIP en ligne de commande. N’hésitez pas si vous avez des questions, ou des remarques a faire ! Davy
    1 point
  2. Bonjour, Votre site web, créations, ou vous recherchez des images pour votre compositing ? Voici un outil qui saura vous plaire : la recherche d'images pas couleurs. Vous êtes sûr de trouver la bonne image/illustrations dans la bonne ambiance de couleurs. Plutôt sympa, nan ? NOTE : Toutes les images trouvés proviennent de la banque d'images de shutterstock, donc pour avoir ces images, il faut payer.
    1 point
  3. Mode automatique : Le mode automatique permet au robot d'être totalement autonome, c'est à dire qu'il se déplacera seul, sans assistance, et esquivera chaque obstacle sur son chemin. Mais comment réaliser ce simple programme ? Et bien grâce à 1 seul composant, et oui, c'est vraiment très simple . Avant de commencer je tiens à préciser que tout ce qui sera expliqué dans ce projet aura pour but précis, de vous faire découvrir le monde de la robotique, mais pas en recopiant mon robot, mais en réalisant VOTRE robot ! De plus, je vous conseille d'aller lire mes tutoriaux arduino présenter sur l'OP du topic Matériel nécessaire : - Arduino Uno - Kit robot ( personnellement le miens est sur l'image de présentation du topic, c'est un robot à 4 roues. Donc à 4 moteur DC. - Un capteur à ultra-son HC-SR04 (Voir OP du topic pour le matériel) Schémas de câblage : Explication du schémas : Un schémas très simple : 2 L293D qui sont branchés exactement identiquement. Le l293D permet d'inverser le sens des moteurs. Par exemple sur le L293D de gauche sur IN1 et IN2 : s'ils ont tout les 2 un signal de 0V ou 5V (que l'ont choisira en le codant) alors le moteur M2 ne s'activera pas. Si in1 est à 5V et IN2 à 0V le moteur tournera dans un sens. Si in1 est à 0V et IN2 à 5V il tournera dans l'autre sens. On fait ça pour les 4 moteurs. Le capteur en haut à droite est le capteur à ultrason, très simpel aussi à utiliser, il y a un cable qui envoie la donnée au µcontrolleur, et un autre qui réceptionne la réponse. Vous l'aurez compris, on activera les moteurs pour faire en sorte que le robot aille tout droit quand le capteur n'envoie aucune donnée. Mais quand ce capteur détecte par exemple un objet à 10 cm. On fera tourné en sens inverse les 2 moteurs de droite pour que le robot effectue une rotation sur lui même C'est très simple, si ça vous parait flou c'est normal, c'est la première fois que vous voyez ceci et le code éclaircira tout pour vous Le robot câblé : Le code arduino : Voilà premier mode fonctionnel une vidéo est à venir. Si vous avez une question concernant le code, n'hésitez pas =)
    1 point
×
×
  • Créer...