WP7 IsolatedFileStorageStream - неправильный размер байта - PullRequest
0 голосов
/ 01 декабря 2011

Используя c #, я загружаю файл с URL-адреса, который пользователь вводит на телефоне. Когда он записывает файл в IsolatedStorage, он записывает слишком много байтов в файл, и поэтому программа, используемая для открытия этих файлов, не открывается.

Когда я отлаживаю, размер бита составляет 451 258 байт, но когда файл экспортируется из IsolatedStorage, он составляет 454 656 байт. Он заполняет оставшееся пространство пробелами. Есть ли способ настроить этот размер файла? Обрезать лишнее пространство в конце и сохранить?

Простите мое невежество, поскольку я новичок в C # и разработке WP7. Буду очень признателен за помощь.

Вот мой код:

       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);
        }

    }

1 Ответ

0 голосов
/ 01 декабря 2011

Заменить

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

на

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