2010-09-27 7 views
1

Je tente de lire un fichier binaire et je continue d'obtenir des erreurs sur les systèmes 64 bits où il semble que le fichier est ouvert avec des privilèges d'écriture et renvoie une erreur lorsqu'il est placé dans un dossier sécurisé (Program Files en 64 bits Les fenêtres). Je peux dupliquer cette erreur sur mon système (XP, 32 bits) en réglant le dossier contenant les documents à lire en lecture seule.Fichier d'ouverture FileStream de C# avec droits d'écriture?

Voici le code que je utilise:

public static byte[] GetContentFromFile(string file) 
    { 
     try 
     { 
      FileStream stream = new FileStream(String.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, file), FileMode.Open, FileAccess.Read); 
      BinaryReader reader = new BinaryReader(stream); 

      byte[] content = new byte[stream.Length]; 

      reader.Read(content, 0, content.Length); 

      reader.Close(); 
      stream.Close(); 

      return content; 
     } 
     catch 
     { 
      return new byte[0]; 
     } 
    } 

Toutes les idées?

+0

Quel est le message d'erreur qu'il vous donne? – w69rdy

+2

Votre méthode est-elle différente de 'File.ReadAllBytes()'? –

+0

Ce code ne demande pas d'accès en écriture. Regardons-nous le bon code? –

Répondre

0

Placer ce fichier dans un dossier AppData à la place?

Il peut être utile de connaître l'exception exacte déclenchée. UnauthorizedAccessException est levé lorsqu'un fichier en lecture seule est ouvert pour l'écriture, tandis que SecurityException est levé si le code est exécuté dans un domaine d'application qui ne dispose pas des autorisations nécessaires pour ouvrir ce fichier dans le mode spécifié. Le premier ne se produira donc que si vous essayez vraiment d'écrire dans un fichier en lecture seule, tandis que le second peut arriver si l'utilisateur ou le code ne peut même pas le lire.

Également, juste une photo dans l'obscurité, essayez de spécifier une valeur FileShare de Read, ce qui permettra à d'autres threads/processus de lire le fichier. La valeur par défaut est Aucun, ce qui verrouille tous les autres accès au fichier et peut provoquer un problème si Windows pense qu'un verrou complet équivaut à un accès en écriture.

Questions connexes