Des ressources au fichier...

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

Messages postés
30
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
24 mars 2011

//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";
}
}