Colección de citas famosas - Slogan de motivación - ¿Cómo empaquetar varios archivos en un solo archivo en C#?

¿Cómo empaquetar varios archivos en un solo archivo en C#?

Existen muchos métodos, pero utilizar directamente el administrador de recursos es sin duda el más rápido.

No me refiero al sistema de recursos de la solución, sino al sistema. Lector y escritor de recursos. Aunque no tienen un soporte tan completo como ResourceManager, la interfaz de enumeración por sí sola es suficiente para usted.

Pasé algún tiempo escribiendo una clase estática auxiliar (ResPacker) directamente para usted. Se completó la depuración y los comentarios están completos. Retirar y utilizar.

¿Usar? Sistema;

¿Uso? sistema. Colección;

¿Uso? sistema. recolectar. Genéricos;

¿Uso? sistema. Recursos;

¿Uso? sistema. Io;

¿Usar? sistema. Dibujo;

¿Espacio de nombres? Aplicación de consola 3

{

¿Clase? Programa

{

//Escrito al frente:

//1. Esta clase auxiliar puede ayudarte a meter cualquier cantidad de objetos arbitrarios en un archivo. También puedes eliminarlos todos a la vez.

//2. Tengo prisa. No escribí try.catch, lo hice yo mismo.

///3. No se recomienda empaquetar diferentes tipos de objetos en un solo archivo. Si usa Imagen, tendrá Imagen, y si usa cadena, tendrá cadena, para no juzgar el tipo después de sacarla.

//4. No escribí adiciones ni eliminaciones, porque el archivo de recursos empaquetado es esencialmente un flujo de bytes continuo y eliminar un archivo del medio es demasiado problemático.

///5. La operación de adición se puede forzar a agregar utilizando el método de empaquetado en modo sin sobrescritura (que se explica más adelante).

///6. Para las operaciones de eliminación, se recomienda leer todos los recursos, eliminar los innecesarios y luego sobrescribirlos de una vez.

//7. NET nunca permitirá que los nombres de recursos tengan el mismo nombre o prefijo numérico. He solucionado el problema del prefijo numérico y yo mismo he solucionado el problema del nombre duplicado. Es mejor incluirlo primero en el diccionario como clave principal y luego colocarlo.

//8. No verifiqué la ocupación del archivo, así que evite desempacar al empaquetar.

//9. Esta es una clase estática. Copie esta clase para los programas Agregar, quitar y modificar gadgets de su cliente.

//999.¡Gracias por mirar! ¡Siéntete libre de usar el código! Si tienes problemas, ¡llámame!

¿Electricidad estática? ¿Vacío? Main(string[]? Parameter)

{

//Embalaje

Diccionario lt string,? objeto gt? dicToPack? =?¿Nuevo? cadena de caracteres del diccionario,? object gt();

Paquete de diccionario. Add("key1",image.from file(@"c:\Users\Mako Sakurai\Pictures\1.jpg));

Paquete de diccionario.Add("key2","¿Hola? Mundo " );

Repack.Pack(dicToPack);

//Descomprimir

Diccionario lt cadena, objeto gt? Repack. /p>

Console.WriteLine((string)dicr cv["key 2"]);

Console.WriteLine(dicRcv["key1"].GetType( ).

Consola.

}

¿Público? Reempaquetado

{

///?ltSummarygt

/ //?Combina cualquier objeto en archivos de recursos.

///?lt/summary gt;

///?ltparam? name="objCollection " >Lista de objetos empaquetados. La clave en un par clave-valor es su nombre único en el archivo de recursos. lt/param gt;

///? ltparam? nombre = " targetFilePath " gt archivo de recursos de destino. El parámetro predeterminado es el archivo "MyRes.pck" en el directorio actual. lt/param gt;

///? ltparam? name = " overwrite " gt Si se sobrescribe el archivo de destino existente. Predeterminado=Verdadero

¿Público? ¿Electricidad estática? ¿Vacío? pack(IDictionary lt; String, Object gt? Object Collection, ? String ? targetFilePath ? = ? "MyRes.pck", ? Boolean ? Overwrite ? = ? true)

{

¿Y si? (sobrescribir)

Archivo. eliminar (ruta del archivo de destino);

¿Usar? (¿ResourceWriter? rw? =? ¿nuevo? ResourceWriter(targetFilePath))

{

foreach? (KeyValuePair lt string, ?object gt?pair?in?object collection)

//Para evitar que el nombre del recurso entrante comience con un número, el nombre del recurso comienza con _

rw. AddResource("_ "? ? par. clave, ? par. valor);

rw. generar();

rw. close();

}

}

///?ltSummarygt

///?Descomprime el archivo de recursos y devuelve todo recursos y sus nombres de recursos.

///?lt/summary gt;

///?ltparam? name = " targetFilePath " gtEl archivo de recursos que se va a descomprimir. El valor predeterminado es "myres. PCK" en el directorio actual