Decompress a file with code.

I literally tried everything. I’m a beginner so I don’t know stuff like that. I know there is a documentation about GZipStream etc. and I read it, really wanted to understand it and even I used the code but I could not maybe understand it or it does not work, I guess the first option works out here. I also tried 2 of the GitHub projects. Nothing worked. I tried Zip and Unzip and Unity Archiver. Maybe I am doing something wrong but I really need to do it. I only want to decompress some new files and delete the old ones. Something like an updater system for my game. I’m downloading files from FTP server, then I want to decompress them and delete the old ones. I just need the decompression to be done. Please help. I really care about that.

There are a lot of assets in the asset store for extracting zip, i would suggest using simple Zip

what kind of error or problems are you having? i once had a similar issue and was trying to decompress the file before making sure the file was 100% downloaded. If you give me extra info like error or code i can maybe give you a better approach

I can’t add comment to your reply for whatever reason :confused: Posting it as an answer also.

The asset can only decompress text so it won’t work. Well, in the Unity Archiver on GitHub was broken script I think, couldn’t fix it. In the Zip and Unzip also on GitHub. I couldn’t figure out how to use it to be honest. The other errors are with GZipStream, like the name of this and this is wrong or something does not contain something, I added some namespaces but it was showing forever. Also my code for downloading is from a guy from Unity Forum. And by the way, I printed the progress of the download script and it was always -1. Here’s the code:

private byte[] downloadWithFTP(string ftpUrl, string savePath = "", string userName = "", string password = "")
{
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ftpUrl));
    //request.Proxy = null;

    request.UsePassive = true;
    request.UseBinary = true;
    request.KeepAlive = true;

    //If username or password is NOT null then use Credential
    if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
    {
        request.Credentials = new NetworkCredential(userName, password);
    }

    request.Method = WebRequestMethods.Ftp.DownloadFile;

    //If savePath is NOT null, we want to save the file to path
    //If path is null, we just want to return the file as array
    if (!string.IsNullOrEmpty(savePath))
    {
        downloadAndSave(request.GetResponse(), savePath);
        return null;
    }
    else
    {
        return downloadAsbyteArray(request.GetResponse());
    }
}

byte[] downloadAsbyteArray(WebResponse request)
{
    using (Stream input = request.GetResponseStream())
    {
        byte[] buffer = new byte[16 * 1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while (input.CanRead && (read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }
}

void downloadAndSave(WebResponse request, string savePath)
{
    Stream reader = request.GetResponseStream();

    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(savePath)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(savePath));
    }

    FileStream fileStream = new FileStream(savePath, FileMode.Create);


    int bytesRead = 0;
    byte[] buffer = new byte[2048];

    while (true)
    {
        bytesRead = reader.Read(buffer, 0, buffer.Length);

        if (bytesRead == 0)
            break;

        fileStream.Write(buffer, 0, bytesRead);
    }
    fileStream.Close();
}

and this is how I use it:

string path = Path.Combine(Application.persistentDataPath, "FTP Files");
path = Path.Combine(path, "data.png");
downloadWithFTP("ftp://yourUrl.com/yourFile", path, "UserName", "Password");

The original thread is here:
https://stackoverflow.com/questions/43411525/download-files-via-ftp-on-android