cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011
-
8 mai 2010 à 14:36
cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011
-
24 mars 2011 à 23:23
Bonjour,
Dans le cadre d'un projet je suis amené à vérifier l'intégrité (dossiers/fichiers) d'une application. Pour la partie dossier, j'ai une jolie fonction qui fait bien le boulot. Pour la partie fichiers, là c'est une autre histoire...
Explication, je dois vérifier la présence de fichiers et si le fichier n'existe pas (supprimer/déplacer par l'utilisateur) je dois en créer un nouveau. Pour ce faire l'application dispose dans ses ressources incorporées de tous les fichiers dont j'ai besoin. Pour convertir une ressource du projet en fichier j'utilise :
Properties.Resources.Background.Save(filePath);
Cette méthode fonctionne parfaitement, le problème c'est que la ressource à sauvegarder n'est pas forcément "Background". Il me faudrait donc un moyen pour effectuer le même travail mais en ayant la possibilité d'informer la méthode sur la ressource à enregistrer et là ca se gâte...
Pour sélectionner une ressource précise j'utilise :
Properties.Resources.ResourceManager.GetObject(nomdemaresource);
mais en faisant cela je perds le ".save(filePath)". J'ai essayé de passer par un Stream mais n'ayant pas encore bien compris le fonctionnement je suis un peu coincé.
cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011 24 mars 2011 à 23:23
//Sauvegarde d'une ressource incorporée vers un fichier selon son type
public string RessourceToFile(string file, string ressource)
{
try
{
//Lecture de la ressource pour identifier son type
string type = Properties.Resources.ResourceManager.GetObject(ressource).GetType().ToString();
//Création du fichier selon le type de la ressource
switch (type.ToLower())
{
//EXE, DLL...
case "system.byte[]":
Byte[] buffer = (byte[])Properties.Resources.ResourceManager.GetObject(ressource);
File.WriteAllBytes(file, buffer);
break;
//Fichier texte (file.ini...)
case "system.string":
string fileRead = (string)Properties.Resources.ResourceManager.GetObject(ressource);
using (StreamWriter fileWriter = new StreamWriter(file))
{
fileWriter.Write(fileRead);
}
break;
//Fichier ICO
case "system.drawing.icon":
Icon icon = (Icon)Properties.Resources.ResourceManager.GetObject(ressource);
using (MemoryStream ms = new MemoryStream())
{
icon.Save(ms);
Byte[] iconBytes = ms.ToArray();
File.WriteAllBytes(file, iconBytes);
}
icon.Dispose();
break;