2016-09-01 3 views
1

Я пытаюсь создать PDF из массива байтов. но это дает проблему «путь доступа запрещен». Я уже дал разрешение в файле манифеста. Я отправляю свой блок кода, пожалуйста, проверьте его на минуту и ​​дайте некоторое предложение и отзывы, чтобы я мог его завершить.System.UnauthorizedAccessException: доступ к пути «/ Download» запрещен. в xamarin android

private void ObjbtnViewSlip_Click(object sender, EventArgs e) 
    { 
     var result = objPaySlipViewModel.GetPaySlipByte(GlobalApplicationSession.EmployeeCode, GlobalApplicationSession.CompanyId, selectedPeriod); 
     if (File.Exists(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/temp.pdf") == false) 
     { 
      Directory.CreateDirectory(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/"); 
      File.Create(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/temp.pdf"); 
      System.IO.File.WriteAllBytes(Android.OS.Environment.DirectoryDownloads + "/RSI/PaySlip/", result); 
     } 
    } 
+0

Пожалуйста, измените изображение на встроенный код. Люди могут скопировать-вставить код в среду IDE и помочь вам быстрее его исправить. – matthewrdev

+0

@matthewrdev проверьте пожалуйста. Мне нужно ваше предложение решить эту проблему –

ответ

2

Во-первых, неверный путь. Android.OS.Environment.DirectoryDownloads будет возвращать только «Скачать»

Измените код, чтобы получить полный путь к папке загрузки, как:

//The following will return the downloads folder path. 
string directory = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads); 
string file = Path.Combine(directory, "/RSI/PaySlip/temp.pdf"); 

Также проверьте, если следующее было упомянуто в AndroidManifest. xml, чтобы предоставить разрешения для приложения.

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" 
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
0
string localStoragePath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
      string localFilename = Path.GetFileName(serverFileName); 
      string localFilePath = Path.Combine(localStoragePath, localFilename); 

      if (!System.IO.File.Exists(localFilePath)) 
      { 
       WebClient webClient = new WebClient(); 
       webClient.DownloadFile(serverFileName, localFilePath);   
      } 

      OpenFile(localFilePath); 


      }); 

общественной недействительный OpenFile (строка Filepath) {

 var bytes = File.ReadAllBytes(filePath); 

     //Copy the private file's data to the EXTERNAL PUBLIC location 
     string externalStorageState = global::Android.OS.Environment.ExternalStorageState; 
     string application = ""; 

     string extension = System.IO.Path.GetExtension(filePath); 

     switch (extension.ToLower()) 
     { 
      case ".doc": 
      case ".docx": 
       application = "application/msword"; 
       break; 
      case ".pdf": 
       application = "application/pdf"; 
       break; 
      case ".xls": 
      case ".xlsx": 
       application = "application/vnd.ms-excel"; 
       break; 
      case ".jpg": 
      case ".jpeg": 
      case ".png": 
       application = "image/jpeg"; 
       break; 
      default: 
       application = "*/*"; 
       break; 
     } 
     var externalPath = global::Android.OS.Environment.ExternalStorageDirectory.Path + "/report" + extension; 
     File.WriteAllBytes(externalPath, bytes); 

     Java.IO.File file = new Java.IO.File(externalPath); 
     file.SetReadable(true); 
     //Android.Net.Uri uri = Android.Net.Uri.Parse("file://" + filePath); 
     var uri = global::Android.Net.Uri.FromFile(file); 
     Intent intent = new Intent(Intent.ActionView); 
     intent.SetDataAndType(uri, application); 
     intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask); 

     try 
     { 
      Application.Context.StartActivity(intent); 
     } 
     catch (Exception) 
     { 
      Toast.MakeText(Application.Context, "No Application Available to View PDF", ToastLength.Short).Show(); 
     } 
    } 
Смежные вопросы