J'essaie de créer un fichier zip d'une chaîne de base codée64, mais je suis bloqué pour obtenir les fichiers de la chaîne.
J'ai pu créer le fichier zip en dehors de celui-ci, mais je ne vois pas le fichier qui devrait y être. p>
mon code jusqu'à présent: p>
public static void Main(string[] args) { IConfiguration config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", false, true) .Build(); var fileName = args[0]; var path = $"{config["zipPath"]}\\{fileName}"; byte[] zipBytes = Convert.FromBase64String(args[1]); using(var memoryStream = new MemoryStream(zipBytes)) { // without this I can't open my zip file using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { } using (var fileStream = new FileStream(path, FileMode.Create)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.CopyTo(fileStream); } } }
3 Réponses :
Lire tout le texte du fichier:
Exemple: p> puis activer la chaîne de base64, dans le fichier texte, dans les octets p> Exemple: P> alors vous pouvez écrire ces octets à un fichier zip p> exemple: p> Si vous souhaitez extraire la mémoire, chargez-le dans une exemple MemorMetream P> Exemple: P> using (var compressedStream = new MemoryStream(bytes2))
{
using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
}
}
}
La base64 est déjà un zip. J'ai besoin de créer une fermeture à glissière. Je ne reçois pas les fichiers qu'il contient séparément
Peu importe le tout, quel type de fichier vous obtenez, car vous recevez une représentation binaire et un nom de fichier. Il peut s'agir d'un Pour que vous puissiez omettre le MemitStream et TheZiparchive, vous écrivez simplement les données binaires dans un fichier avec une extension .zip: p> (j'ai créé une chaîne de base64 à partir d'un .zip avant) P> .jpg code>, d'un disque
.vhd code> disque virtuel, d'une base de données
.mdb code>, peu importe.
var path = @"c:\temp\import.zip";
string base64 = "";
using (FileStream zip = new FileStream(path, FileMode.Open))
{
var zipBytes = new byte[zip.Length];
zip.Read(zipBytes,0,(int)zip.Length);
base64 = Convert.ToBase64String(zipBytes);
}
Cela semble créer une nouvelle entrée, ce que je veux, c'est avoir les entrées originales de mon fichier ZIP d'origine
De toute évidence, votre question est très peu claire, voir aussi l'autre réponse? Aucune idée de ce que vous essayez d'atteindre ...
Oui, étrange, mais je pense que je l'ai eu. Êtes-vous sûr que la chaîne BAS64 que vous avez est correcte? Votre code a l'air bien pour cela, même si je ne comprends pas l'utilisation de zipararchive code>.
Ma suggestion est d'utiliser la méthode zipfile CreatefromDirectory
public static void Main(string[] args) { IConfiguration config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", false, true) .Build(); var fileName = args[0]; var path = $"{config["zipPath"]}\\{fileName}"; string extractPath = @"c:\users\exampleuser\extract"; byte[] zipBytes = Convert.FromBase64String(args[1]); using(var memoryStream = new MemoryStream(zipBytes)) { using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Read)) { archive.ExtractToDirectory(extractPath); } ZipFile.CreateFromDirectory(extractPath, path); } }
Qu'est-ce qu'en
args [1] code>? la chaîne de base64? et ce qui est dans
args [0] code> ???
@Falcoalexander args [0] = le nom du fichier zip, args [1] = la chaîne de base64 du fichier zip codé
Je ne peux pas très suivre ... Vous devez créer un fichier Temp avec la chaîne de base64 et ce fichier doit être dans un nouveau fichier .zip? Ensuite, vous êtes manifestement manquant qc.
@Falcoalexander J'ai juste besoin du fichier zip et je veux que ce soit identique au fichier zip d'origine codé pour base64, y compris les fichiers dans le fichier ZIP d'origine.
Dupliqué possible de Decode Base64 en C # ou Java