2010-01-06 7 views
0

J'ai une assez grande ressource (2MB) que j'introduis dans mon application C# ... Je veux savoir la lire en mémoire puis l'écrire sur le disque pour l'utiliser pour un traitement ultérieur?Incorporation d'un fichier dans l'application C# .NET, puis lecture lente?

J'ai intégré la ressource dans mon projet de construction mise

Toute pièce exemple de code me aidera démarrage.

+0

"comme paramètre de construction" ne signifie rien. Le voyez-vous dans l'onglet Ressources ou est-il visible dans la fenêtre Solution? –

Répondre

3

Vous devez Stream dans la ressource à partir du disque, puisque le .NET Framework ne sera probablement pas charger vos ressources jusqu'à ce que vous les accès (je ne suis pas sûr à 100%, mais je suis assez confiant)

Pendant que vous diffusez le contenu, vous devez également les réécrire sur le disque.

Rappelez-vous, cela va créer le nom de fichier comme « YourConsoleBuildName.ResourceName.Extenstion »

Par exemple, si votre objectif de projet est appelé « ConsoleApplication1 », et votre nom de ressource est « My2MBLarge.Dll », votre fichier sera créé comme "ConsoleApplication1.My2MBLarge.Dll" - Bien sûr, vous pouvez le modifier comme vous le voyez.

private static void WriteResources() 
    { 
     Assembly assembly = Assembly.GetExecutingAssembly(); 
     String[] resources = assembly.GetManifestResourceNames(); 
     foreach (String name in resources) 
     { 
      if (!File.Exists(name)) 
      { 
       using (Stream input = assembly.GetManifestResourceStream(name)) 
       { 
        using (FileStream output = new FileStream(Path.Combine(Path.GetTempPath(), name), FileMode.Create)) 
        { 
         const int size = 4096; 
         byte[] bytes = new byte[size]; 

         int numBytes; 
         while ((numBytes = input.Read(bytes, 0, size)) > 0) 
          output.Write(bytes, 0, numBytes); 
        } 
       } 
      } 
     } 
    } 
+0

fonctionne ... merci ajouter gestion des exceptions – halivingston

2
var assembly = Assembly.GetExecutingAssembly(); 
using (var stream = assembly.GetManifestResourceStream("namespace.resource.txt")) 
{ 
    byte[] buffer = new byte[stream.Length];  
    stream.Read(buffer, 0, buffer.Length); 
    File.WriteAllBytes("resource.txt", buffer); 
} 
2

les opérations suivantes:

Assembly Asm = Assembly.GetExecutingAssembly(); 
var stream = Asm.GetManifestResourceStream(Asm.GetName().Name + ".Resources.YourResourceFile.txt"); 
var sr = new StreamReader(stream); 
File.WriteAllText(@"c:\temp\thefile.txt", sr.ReadToEnd); 

Le code suppose que votre fichier intégré est appelé YourResourceFile.txt et qu'il est dans un dossier dans votre projet appelé Resources. Et bien sûr le dossier c:\temp\ doit exister et être inscriptible.

Espérons que ça aide.

/Klaus