Pregunta

Usando C#, estoy descargando un archivo de una URL que ingresa al usuario en el teléfono. Cuando está escribiendo el archivo al Aislado Storage, está escribiendo demasiados bytes en el archivo y, por lo tanto, el programa utilizado para abrir estos archivos no se abrirá.

Cuando depuré, el tamaño de bit es 451,258 bytes, pero cuando el archivo se exporta desde Aislado Storage, es 454,656 bytes. Está llenando el espacio restante con espacios. ¿Hay de todos modos para ajustar este tamaño de archivo? ¿Recortar el espacio adicional al final y guardar?

Perdona mi ignorancia ya que soy nuevo en C# y WP7 Developroment. Apreciaría mucho la ayuda.

Aquí está mi código:

       public void readCompleteCallback(Object sender, OpenReadCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            try
            {
                //string fileName = txtUrl.Text.Substring(txtUrl.Text.LastIndexOf("/") + 1).Trim();
                string fileName = "DownloadedNZB.nzb";
                bool isSpaceAvailable = IsSpaceIsAvailable(e.Result.Length);

                if (isSpaceAvailable)
                {
                    // Save mp3 to Isolated Storage
                    using (var isfs = new IsolatedStorageFileStream(fileName,
                                        FileMode.CreateNew,
                                        IsolatedStorageFile.GetUserStoreForApplication()))
                    {
                        long fileLen = e.Result.Length;
                        byte[] b = new byte[fileLen];
                        e.Result.Read(b, 0, b.Length);
                        isfs.Write(b, 0, b.Length);
                        isfs.Flush();
                        isfs.Close();
                        MessageBox.Show("File downloaded successfully");                      
                    }

                }
                else
                {
                    MessageBox.Show("Not enough to save space available to download the file");
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        else
        {
            MessageBox.Show(e.Error.Message);
        }

    }
¿Fue útil?

Solución

Reemplazar

e.Result.Read(b, 0, b.Length);
isfs.Write(b, 0, b.Length);
isfs.Flush();
isfs.Close();

con

var numberOfBytesRead = e.Result.Read(b, 0, b.Length);
isfs.Write(b, 0, numberOfBytesRead);
isfs.Flush();
isfs.Close();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top