Des ressources au fichier...

cs_luminor Messages postés 30 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 24 mars 2011 - 8 mai 2010 à 14:36
cs_luminor Messages postés 30 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 24 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é.

Suis-je clair ? Merci pour votre aide

1 réponse

cs_luminor Messages postés 30 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 24 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;

//Fichiers 'image', PNG, BMP...
case "system.drawing.bitmap":
Bitmap bitmap = (Bitmap)Properties.Resources.ResourceManager.GetObject(ressource);
bitmap.Save(file);
bitmap.Dispose();
break;
}
}
catch (IOException e)
{
return e.Message;
}
catch (UnauthorizedAccessException e)
{
return e.Message;
}
catch
{
return "Unknow error";
}
}
0
Rejoignez-nous