2012-10-11 35 views
7

Estoy creando un archivo usando XmlWriter, XmlWriter writer = XmlWriter.Create(fileName); estoy creando un archivo y luego tengo una función más a la que llamo private void EncryptFile(string inputFile, string outputFile) que toma 2 cadenas de entrada y outpulfile y al final tengo dos archivos uno está encriptado y el otro no. Solo quiero un archivo encriptado, pero para mi función de cifrado, toma el archivo de entrada creado por XmlWriter. ¿Hay alguna manera de que pueda crear un flujo de memoria y pasarlo a mi función en lugar de crear un archivo de entrada? mi cifran la funciónXML writer y Memory Stream C#

private void EncryptFile (string inputFile, string outputFile) 
      string password = @"fdds"; // Your Key Here 
      UnicodeEncoding UE = new UnicodeEncoding(); 

      byte[] key = UE.GetBytes(password); 
      string cryptFile = outputFile; 
      FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create); 

      RijndaelManaged RMCrypto = new RijndaelManaged(); 


      CryptoStream cs = new CryptoStream(fsCrypt,RMCrypto.CreateEncryptor(key,key),CryptoStreamMode.Write); 

      FileStream fsIn = new FileStream(inputFile, FileMode.Open); 

      int data; 
      while ((data = fsIn.ReadByte()) != -1) 
       cs.WriteByte((byte)data); 
      cs.FlushFinalBlock(); 
      fsIn.Close(); 
      cs.Close(); 
      fsCrypt.Close(); 
     } 
    }  

Respuesta

15

Usted puede crear un XmlWriter que escribe en una secuencia de memoria:

var stream = new MemoryStream(); 
var writer = XmlWriter.Create(stream); 

Ahora usted puede pasar esta corriente a su función EncryptFile en lugar de un inputFile. Usted tiene que asegurarse de que no se olvide de estas dos cosas antes de leer la corriente:

  1. hacer una llamada a writer.Flush() cuando haya terminado de escribir.
  2. Establezca stream.Position de nuevo en 0 antes de comenzar a leer la secuencia.
+0

writer.Flush() era lo que me estaba perdiendo. Gracias. – granadaCoder