BackgroundTransfer无法移动文件

时间:2014-03-24 09:13:03

标签: c# windows-phone-8

我在使用后台传输下载文件时遇到问题。在移动文件后完成下载后,它会为您提供例外Operation not permitted

void addTransferRequest(string fileName)
{
     if (string.IsNullOrEmpty(fileName))
           return;
     string filePathToDownload = string.Empty;
     filePathToDownload = activeReciter.DownloadURL;
     filePathToDownload += fileName;

     Uri transferUri = new Uri(Uri.EscapeUriString(filePathToDownload), 
                               UriKind.RelativeOrAbsolute);
     BackgroundTransferRequest transferRequest = new 
     BackgroundTransferRequest(transferUri);
     transferRequest.Method = "GET";
     transferRequest.TransferPreferences = TransferPreferences.AllowBattery;

     Uri downloadUri = new Uri(DataSource.TEMPDOWNLOADLOCATION + fileName, 
                               UriKind.RelativeOrAbsolute);
     transferRequest.DownloadLocation = downloadUri;
     transferRequest.Tag = fileName;

     transferRequest.TransferStatusChanged += 
       new EventHandler<BackgroundTransferEventArgs>
                                              (transfer_TransferStatusChanged);
     transferRequest.TransferProgressChanged += new 
     EventHandler<BackgroundTransferEventArgs>(transfer_TransferProgressChanged);

     try
     {
       BackgroundTransferService.Add(transferRequest);
       chapterFileNames.Dequeue();
     }
     catch (InvalidOperationException)
     {
     }
     catch (Exception)
     {
     }
}
void transfer_TransferStatusChanged(object sender, BackgroundTransferEventArgs e)
{
   ProcessTransfer(e.Request);
}
void transfer_TransferProgressChanged(object sender, BackgroundTransferEventArgs e)
{
}
private void ProcessTransfer(BackgroundTransferRequest transfer)
{
    switch (transfer.TransferStatus)
    {
       case TransferStatus.Completed:
       if (transfer.StatusCode == 200 || transfer.StatusCode == 206)
       {
             using (IsolatedStorageFile isoStore = 
                    IsolatedStorageFile.GetUserStoreForApplication())
                 {
                   try
                   {
                      string filename = transfer.Tag;
                      string folderPath = string.Format(@"{0}{1}\{2}\", 
                        DataSource.DOWNLOADLOCATION, activeReciter.ReciterID, chapter.ChapterID);
                      string fileFullPath = folderPath + filename;

                      if (!isoStore.DirectoryExists(Path.GetDirectoryName(folderPath)))
                          isoStore.CreateDirectory(Path.GetDirectoryName(folderPath));

                      if (isoStore.FileExists(fileFullPath))
                          isoStore.DeleteFile(fileFullPath);

                      isoStore.MoveFile(transfer.DownloadLocation.OriginalString, fileFullPath); 
                      //Excpetion is thrown here
                      RemoveTransferRequest(transfer.RequestId);
                }
                catch (Exception ex)
                {
                MessageBox.Show("Error Occured: " + ex.Message + transfer.Tag, "Error", 
                                 MessageBoxButton.OK);
                return;
                }
            }
        }
        break;
    }
}

移动文件时,会抛出异常,我不知道移动有什么问题(这种情况发生在某些文件而不是所有文件上)。

1 个答案:

答案 0 :(得分:0)

MSDN Page下的File System Restrictions部分:

  

您可以创建您选择的任何其他目录结构   在根“/ shared / transfers”目录下,你可以复制或   传输完成后移动文件以确保   后台传输服务不会修改文件,而是尝试   使用“/ shared / transfers”之外的路径启动传输   目录将抛出异常。

确保您没有尝试将文件移出/Shared/Transfers文件夹。