Stocker les fichiers dans un fichier EXE C #

En fait, il m’est utile de stocker certains fichiers au format EXE pour les copier à l’emplacement sélectionné. Je génère des fichiers HTML et JS et je dois copier des fichiers CSS, JS et GIF.

Fragment

System.IO.File.WriteAllBytes (@ “C: \ MyFile.bin”, ProjectNamespace.Properties.Resources.MyFile);

ça ne marche pas pour moi!

Sur “WriteAllBytes”, il est indiqué: “impossible de convertir” System.Drawing.Bitmap “en” octet [] “” pour une image et “impossible de convertir” chaîne “en” octet [] “” pour un fichier texte.

Aidez-moi!

MISE À JOUR: résolu ci-dessous.

Ajoutez les fichiers de votre choix à votre solution, puis définissez leur propriété Build Action de Embedded Resource . Cela intégrera le fichier dans votre fichier .exe. ( msdn )

Ensuite, il vous suffit d’écrire le code pour écrire le fichier sur le disque lorsque le fichier exe est exécuté.

Quelque chose comme:

 File.Copy("resource.bmp", @"C:\MyFile.bin"); 

Remplacez resource.bmp par votre nom de fichier.

Addenda:

Si vous conservez le fichier dans un sous-dossier de votre solution, vous devez inclure le sous-dossier dans le chemin d’access à resource.bmp . Par exemple:

 File.Copy(@"NewFolder1\resource.bmp", @"C:\MyFile.bin"); 

En outre, vous devrez peut-être définir la propriété Copy Always dans le Copy To Output Directory sur Copy Always ou Copy If Newer .

Je suppose que vous avez ajouté les fichiers via la fenêtre Propriétés du projet. Cela ne vous permet pas d’append un fichier arbitraire, mais il prend en charge les fichiers TextFiles, Bitmaps, etc.

Pour un TextFile incorporé, utilisez

  File.WriteAllText(@"C:\MyFile.bin", Properties.Resources.TextFile1); 

Pour une image, utilisez

  Properties.Resources.Image1.Save(@"C:\MyFile.bin"); 

Vous pouvez incorporer des fichiers binarys dans un fichier .resx. Placez-les dans la section Fichiers (il semblerait que vous ayez utilisé la section Images ). Il devrait être accessible sous forme de tableau d’octets si votre fichier .resx génère un fichier .Designer.cs.

 File.WriteAllBytes(@"C:\foobar.exe", Properties.Resources.foobar); 

Ajoutez des fichiers aux ressources du projet et définissez leur “action de génération” en tant que “ressource incorporée”.

Maintenant, extrayez n’importe quel fichier (texte ou binary) en utilisant cet extrait:

 WriteResourceToFile("Project_Namespace.Resources.filename_as_in_resources.extension", "extractedfile.txt"); public static void WriteResourceToFile(ssortingng resourceName, ssortingng fileName) { int bufferSize = 4096; // set 4KB buffer byte[] buffer = new byte[bufferSize]; using (Stream input = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) using (Stream output = new FileStream(fileName, FileMode.Create)) { int byteCount = input.Read(buffer, 0, bufferSize); while (byteCount > 0) { output.Write(buffer, 0, byteCount); byteCount = input.Read(buffer, 0, bufferSize); } } } 

Je ne sais pas à quelle profondeur est-il correct selon cet article: http://www.yoda.arachsys.com/csharp/readbinary.html mais cela fonctionne.