none
Leer un archivo y ponerlo en memoria RRS feed

  • Pregunta

  • Buenas, el tema es asi: tengo un programa en c# que carga un flash, el cual me va pidiendo archivos que necesita y se los voy devolviendo. El problema es que estos archivos estan encriptados por lo que cuando me pide un archivo yo primero tengo que desecriptarlo y despues pasarselo. Ese desencriptar tiene que hacerse sin crear un archivo encriptado en la maquina porque sino el cliente obtendria todos los archivos desencriptados. Por lo tanto al desencriptar lo tendria que hacer en un bufer o algo asi y pasarle el contenido de ese buffer al flash. Como hago esto de poner el archivo desencriptado en el buffer como para que despues se lo pueda mandar al flash??

    Gracias

    viernes, 3 de septiembre de 2010 14:49

Respuestas

Todas las respuestas

  • si los archivos no son muy grandes entonces has esto

     

    1. Obtener un Stream del archivo
    2. Crear un MemoryStream
    3. con el MemoryStream obtienes un byte[]
    4. desencriptas el byte[]
    5. Creas un nuevo MemoryStream a partir del byte[]
    6. eso es todo!

     

    ahora, para pasarselo a flash... es otro cuento ya que si flash solo lee archivos no hay nada que hacer... deberas crear un archivo, pero si es capaz de leer byte[] o Streams entonces no será necesario...

     


    Juan Carlos Ruiz - Microsoft MVP Visual C#
    Sígueme en Twitter:

    @JuanKRuiz

    Visita mi blog:

    C#, XNA, Win32 - http://juank.black-byte.com

    viernes, 3 de septiembre de 2010 15:14
    Moderador
  • hola

    mas alla de la memoria que estos archivos pudieran ocupar si es que son muy grandes, podrias crear un proceso al principio de tu aplciacion que lea los archivos los desencripte y el contenido los guarde en una lista generica, del tipo List<string>

    la lista te servira para guardar el contenido de cada archivo, el string de cada archivo, lo agregas haciando

    List<string> listtextfiles = new List<string>();

    foreach(FileInfo file in listadearchivos){

       //aqui desencriptas y obtienes el contenido

      list.Add("<contenido del archivo desencriptado>");

    }

     

    si necesitas identificar el archivos, podrias usar un Dictionary<> generico

    Dictionary<string, string>, en donde la clase vera el nombre del archivo que lo identifica, y el contenido el texto desencriptado

    bueno espero sea util esta idea

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 3 de septiembre de 2010 15:19
  • Gracias por responder tan rapido. El flash tambien lo uso con php y acepta el archivo haciendo un echo del header correspondiente mas el contenido del archivo, asi que si le paso el contenido del archivo con el header arriba capas que me lo tome. Ahora a que te referis con un archivo muy largo?? Porque un swf viendolo como cadena de caracteres es muy largo. Voy a probar de hacer lo que decis primero. Gracias
    viernes, 3 de septiembre de 2010 15:21
  • Claro pero el problema es que el desencriptar que uso es uno que crea el archivo desencriptado. Uso la clase Crypto que no me acuerdo de donde la saque.

    Que me recomiendan para encriptar y desencriptar un swf y que me permita hacer lo que busco??

    Gracias

    viernes, 3 de septiembre de 2010 15:24
  • Buenas, sigo con el problema de devolverle un archivo al flash para que lo reproduzca.

    Con php para que el flash lo tome lo unico que hacia era agregarle un header('Content-Type: application/x-shockwave-flash') y hacia un echo del contenido del archivo desencriptado.

    Acá que puedo usar para simular este comportamiento??

    Con los archivos txt y xml funciona bien devolviendole el string pero me parece que el problema está en que cuando trato de leer el contenido del flash me lee mal algunos caracteres y los cambia por otros.

    Gracias

    lunes, 6 de septiembre de 2010 12:05
  • Estuve viendo bien como funciona la aplicacion php que trabaja con el flash y entendi algunas cosas mas (aclaro que yo no hice esa aplicacion).

    El comando loadMovie de flash que es el encargado de mostrar el swf tiene que recibir una ruta, que puede ser por ejemplo servidor/get_archivo.php y este php al setear el header del archivo como swf y mostrar el contenido del swf, el php se "convierte" en un swf.

    Ahora voy a averiguar si en flash hay algo que acepte el contenido del archivo sin tener que pasarle una direccion.

    Sino lo que me queda es generar el archivo desencriptado y pasarselo al flash y de alguna forma proteger ese archivo para que el usuario no pueda ni verlo ni accederlo ni nada (el usuario comun, ya se que cualquiera con un poco de conocimiento lo va a hacer).

    Como podría proteger ese archivo?? Escucho cualquier propuesta!!!! (hasta las casi indecentes) jaja

    Aclaracion: El programa tambien lo voy a tener que hacer correr en linux.

    Gracias

    • Editado polaco_cac lunes, 6 de septiembre de 2010 12:57 aclaracion
    lunes, 6 de septiembre de 2010 12:40
  • has que te funcione con un archivo normal.. una vez ya te funcione asi miramos lo de la encripcion.
    Juan Carlos Ruiz - Microsoft MVP Visual C#
    Sígueme en Twitter:

    @JuanKRuiz

    Visita mi blog:

    C#, XNA, Win32 - http://juank.black-byte.com

    lunes, 6 de septiembre de 2010 14:09
    Moderador
  • A ver, paso en limpio lo que tengo. Tengo un sistema que encripta los archivos y otro que es el encargado de mostrarlos (que va a estar instalado en la maquina del cliente). Ahora está funcionando de la siguiente manera: leo de una base de datos el primer archivo a cargar y según su tipo es el flash que levanto (que vendria a ser el "cargador"). Este cargador me pide archivos, que pueden ser xml, txt,jpg,swf,etc. Estos archivos que me piden están encriptados. Lo que hago ahora es desencriptarlo y pasarselo al flash. Este desencriptado me crea un archivo en la maquina del cliente porque no encontre otra forma de encriptar y desencriptar un swf para despues pasarselo al cargador. El problema está en que al desencriptar el archivo, el mismo queda guardado en la máquina del cliente, por lo que tendría que protegerlo de alguna forma. Gracias
    lunes, 6 de septiembre de 2010 14:37
  • Por lo que estuve investigando voy a tener que hacerlo asi nomas, es decir, tengo que desecriptar el archivo y guardarlo desencriptado para que el flash lo pueda tomar. Ahora lo unico que quedaría sería proteger estos archivos sin que esto me joda al flash.

    Leí por algún lado algo del almacenamiento aislado, puede servir para este caso??

    GRACIAS

    martes, 7 de septiembre de 2010 12:30
  • Leí por algún lado algo del almacenamiento aislado, puede servir para este caso??

    No, Isolated Storage no te serviria en este caso, o al menos no de manera automatica...

    recomendacion final:

    utiliza Isolated Storage para darle algun nivel de dificultad para hallar los archivos y por otro lado asegurate que cada vez que tu aplicacion arranque o se apague esta deje el directorio de Isolated Storage vacio.

     


    Juan Carlos Ruiz - Microsoft MVP Visual C#
    Visita mi blog:

    C#, XNA, Win32 - http://juank.black-byte.com

    Twitter: @JuanKRuiz
    Facebook: Arquitecto de Software

    martes, 7 de septiembre de 2010 13:52
    Moderador
  • Buenas, estoy viendo lo del Isolated Storage. Tengo 2 dudas

    Como hago para saber donde guarda el archivo?? Porque el flash quiere que le pase la ruta completa.

    Y la otra duda es saber si esto va a funcionar en linux.

    GRACIAS!!!

    viernes, 10 de septiembre de 2010 14:18
  • eso e sun problema ahora que lo miro..

    porquie Isolated Storage precisamente no te permite saber con certeza esa ruta..

    tratatare de revisarlo en un rato y te cuento,.


    Juan Carlos Ruiz - Microsoft MVP Visual C#
    Visita mi blog:

    C#, XNA, Win32 - http://juank.black-byte.com

    Twitter: @JuanKRuiz
    Facebook: Arquitecto de Software

    viernes, 10 de septiembre de 2010 14:26
    Moderador
  • Podria hacer una busqueda de archivo con el archivo que acabo de crear (incluyendo que busque en ocultos y archivos de sistema) o no??

    Gracias por tu tiempo!!

    viernes, 10 de septiembre de 2010 14:34
  • Buenas, todavia no logro obtener la direccion completa del archivo desencriptado para poder pasarselo al flash. Alguien tiene una idea para probar??

    GRACIAS

    lunes, 13 de septiembre de 2010 11:25
  • Lo logre al menos por ahora:

    IsolatedStorageFile store = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
    IsolatedStorageFileStream stream = new IsolatedStorageFileStream("test.txt", FileMode.Create, store);
    StreamWriter writer = new StreamWriter(stream);
    writer.WriteLine("Hello");
    writer.Close();
    stream.Close(); <br/>
    // Devuelve el path actual<br/>
    string path = stream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(stream).ToString();
    

    Ya voy a ver como hago cuando lo tenga que hacer andar en linux.

    Gracias y los sigo molestando con otras cosas!!!

    lunes, 13 de septiembre de 2010 12:15
  • no me termina de convencer...

    usar Isolated Storage Ayudara en parte a la ocultacion del contenido de archivo...

    yo te sugiero, sin embargo, que abras o crees el archivo con acceso exclusivo, luego lo cierras para pasarlo a flash...

    tu aplicacion cada vez que se cierra o abra debe eliminar todo el contenido del folder temporal .


    Juan Carlos Ruiz - Microsoft MVP Visual C#
    Visita mi blog:

    C#, XNA, Win32 - http://juank.black-byte.com

    Twitter: @JuanKRuiz
    Facebook: Arquitecto de Software

    lunes, 13 de septiembre de 2010 13:13
    Moderador
  • Y como hago para crear el archivo con acceso exclusivo?? Y para que el flash pueda abrir este archivo sin que se lo impida este acceso exclusivo. Y si, cuando abro o cierro el programa limpio el isolated storage.
    lunes, 13 de septiembre de 2010 14:51
  • Buenas, vuelvo al proyecto y sigo con esta duda que me planteó Juan Pablo. ¿Como puedo hacer para crear el archivo con acceso exclusivo y que aún lo pueda seguir usando el flash?

    Gracias

    jueves, 23 de septiembre de 2010 12:08
  • Hola lamento no haberte ayudado aún.

    Por estos días ando muy ocupado en la oficina por erso he estado muy ausente del foro.

     

    Tan pronto como pueda tratare de retomar estos temas.


    Juan Carlos Ruiz - Microsoft MVP Visual C#
    Visita mi blog:

    C#, XNA, Win32 - http://juank.black-byte.com

    Twitter: @JuanKRuiz
    Facebook: Arquitecto de Software

    jueves, 23 de septiembre de 2010 12:46
    Moderador