es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Varios procesos en un botón.

Antes que nada, hola chicos, solo quería agregar un botón que descargue archivos zip desde un enlace y luego los descomprima, pero me encontré con problemas y obtengo este error:

“System.IO.IOException: ‘No se puede acceder al archivo ‘C:\GTA\TEST.zip’ porque está siendo utilizado por otro proceso.'”

Parece algo sencillo, pero no puedo resolverlo, así que espero que ustedes me ayuden. Este es el código:

private void button2_Click(object sender, EventArgs e)
{

    string root = @"C:\GTA";
    // esto si el directorio no existe
    if (!Directory.Exists(root))
    {
        Directory.CreateDirectory(root);
    }

    progressBar1.Value = 0;
    WebClient webcl = new WebClient();
    webcl.DownloadFileCompleted += Webcl_DownloadFileCompleted;
    webcl.DownloadProgressChanged += Webcl_DownloadProgressChanged;
    webcl.DownloadFileAsync(new Uri("https://download1474.mediafire.com/17r5hin4vceg/izkb8vk7pudg5g4/TEST.zip"), @"C:\GTA\TEST.zip");

    string targetfolder = @"C:\GTA\UNZIPEDFolder";
    string sourceZipFile = @"C:\GTA\TEST.zip";
    ZipFile.ExtractToDirectory(sourceZipFile, targetfolder);
} 
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el archivo ‘C:\GTA\TEST.zip’ está siendo utilizado actualmente por otro proceso, lo que impide acceder a él.

    Para resolver este problema, es posible que desee modificar su código para esperar a que el archivo termine de descargarse antes de descomprimirlo. Aquí tienes una versión actualizada de tu código:

    private async void button2_Click(object sender, EventArgs e)
    {
        string root = @"C:\GTA";
        //si el directorio no existe
        if (!Directory.Exists(root))
        {
            Directory.CreateDirectory(root);
        }
    
        progressBar1.Value = 0;
        WebClient webcl = new WebClient();
        webcl.DownloadFileCompleted += Webcl_DownloadFileCompleted;
        webcl.DownloadProgressChanged += Webcl_DownloadProgressChanged;
    
        //esperar a que termine la descarga antes de descomprimir
        await webcl.DownloadFileTaskAsync(new Uri("https://download1474.mediafire.com/17r5hin4vceg/izkb8vk7pudg5g4/TEST.zip"), @"C:\GTA\TEST.zip");
    
        string targetfolder = @"C:\GTA\UNZIPEDFolder";
        string sourceZipFile = @"C:\GTA\TEST.zip";
        ZipFile.ExtractToDirectory(sourceZipFile, targetfolder);
    }
    

    El método DownloadFileTaskAsync esperará a que la descarga del archivo se complete antes de continuar con la siguiente línea de código para descomprimir el archivo. Esto debería resolver el problema de que el archivo esté siendo utilizado por otro proceso.

Comments are closed.