2017-04-18 1 views
0

Am en cours d'exécution du projet sur le visual studio 2015, Quand j'ai essayé de lire le PDF de son me donner l'erreur suivante;System.IO.File.ReadAllBytes L'accès au chemin refusé

L'accès au chemin 'E: \ FILE \ FILEUPLOAD \ InnerFile \ File' est refusé.

Fonction Defination

var cd = new System.Net.Mime.ContentDisposition { FileName = "PDF.pdf", Inline = true }; 

       string contentType = MimeMapping.GetMimeMapping("PDF.pdf"); 
    Response.AppendHeader("Content-Disposition", cd.ToString()); 
    var innerPath = "InnerFile/File" ; 

       FileInfo fi = new FileInfo(PDFUploadRootPath + innerPath + "/PDF.pdf"); 

byte[] bytes = System.IO.File.ReadAllBytes(PDFUploadRootPath + innerPath); 

      return File(bytes, contentType); 

REMARQUE:

  • donné la permission à l'utilisateur complète
  • Physiquement fichier Existant

Je ne comprends pas ce qu'il faut faire maintenant s'il vous plaît aider!

enter image description here

+0

N'utilisez pas la concaténation de chaînes lorsque vous traitez des chemins comme ceci '' 'new FileInfo (PDFUploadRootPath + innerPath +" /PDF.pdf ");' '', utilisez '' 'Path.Combine'''. Je vois que vous avez une barre oblique '' '/' '' non backslash - en supposant que vous utilisez Windows, c'est un mauvais séparateur de chemins. –

+0

Oui, je l'exécute sous Windows ... Le fichier est trouvé lors de la vérification 'fi.Existe'. de sorte que son pas un problème avec le chemin de son donnant l'erreur lors de la lecture @MarcinZablocki –

+1

Si votre intention est de lire le fichier de chemin '' 'PDFUploadRootPath + innerPath + « /PDF.pdf »' '', alors vous n'êtes pas le faire dans la ligne suivante: '' 'System.IO.File.ReadAllBytes (PDFUploadRootPath + innerPath)' ''. –

Répondre

1

Votre FileInfo exemple fait référence « E: \ DOSSIER \ fileUpload \ InnerFile \ fichier \ pdf.pdf « :

FileInfo fi = new FileInfo(PDFUploadRootPath + innerPath + "/PDF.pdf"); 

mais en essayant de lire le contenu du fichier que vous avez oublié le nom du fichier et utiliser uniquement le chemin « E: \ dOSSIER \ fileUpload \ InnerFile \ fichier »:

byte[] bytes = System.IO.File.ReadAllBytes(PDFUploadRootPath + innerPath); 

Ainsi, ajoutez également le nom de fichier pour lire tous les octets du fichier:

byte[] bytes = System.IO.File.ReadAllBytes(PDFUploadRootPath + innerPath + "/PDF.pdf"); 

En outre, comme d'autres l'ont mentionné dans les commentaires, vous devez vraiment utiliser Path.Combine pour coller des pièces de chemin ensemble, et non concaténation de chaîne simple ...

+0

AHHHHHH, Thanx mate qui était une erreur plus stupide :( –

0

Essayez d'utiliser FileStream au lieu de tableau d'octets pour la lecture du fichier pdf.

FileStream templateFileStream = File.OpenRead(filePath); 
      return templateFileStream; 

Vérifiez aussi (par code) si l'utilisateur a le droit d'écriture dans le répertoire ou le chemin:

public static bool HasUserWritePermission(String path, String NtAccountName) 
    { 
     DirectoryInfo di = new DirectoryInfo(path); 
     DirectorySecurity acl = di.GetAccessControl(AccessControlSections.All); 
     AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount)); 
     Boolean hasPermission = false; 
     //Go through the rules returned from the DirectorySecurity 
     foreach (AuthorizationRule rule in rules) 
     { 
      //If we find one that matches the identity we are looking for 
      if (rule.IdentityReference.Value.Equals(NtAccountName, StringComparison.CurrentCultureIgnoreCase)) 
      { 
       //Cast to a FileSystemAccessRule to check for access rights 
       if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.WriteData) > 0) 
       { 
        hasPermission = true; 
       } 
       else 
       { 
        hasPermission = false; 
       } 
      } 
     } 
     return hasPermission; 
    }