2010-10-18 28 views
2

Notre application nécessite qu'un utilisateur sélectionne une photo de son appareil photo. Les caméras que j'ai testées lors de l'ajout de cette fonctionnalité apparaissent toutes comme des lettres de lecteur dans "Poste de travail", le chargement et l'utilisation de l'image étaient donc évidents. Un collègue m'a donné son appareil photo qui, plutôt que de monter comme un lecteur, déclenche l'horrible "Scanner and Camera Wizard". J'ai été encouragé de voir que dans "My Computer" il y avait une entrée pour la caméra et en effet j'étais capable de naviguer et de sélectionner des fichiers à partir d'un OpenFileDialog standard. - GÉNIAL! Sauf que lorsque j'essaie d'ACCEDER au fichier je reçois "UnauthorizedAccessException". Après enquête, je vois qu'il est en train de charger les fichiers à partir de cet emplacement: C: \ Documents and Settings \ sk \ Paramètres locaux \ Fichiers Internet temporaires \ Content.IE5 \ AXY0DNE3La lecture d'un fichier ouvert à partir de "Scanners and Cameras" génère une exception UnauthorizedAccessException

Que dans le monde ?! IE5.5 ??

De là, les choses continuent à descendre. Cet emplacement est apparemment un endroit très bien caché que je ne peux que naviguer en entrant directement le chemin dans la barre de l'explorateur. J'ai ensuite pensé que je pouvais simplement copier le fichier dans un emplacement temporaire et travailler avec lui à partir de là. J'ai donc fait cela mais je ne peux toujours pas travailler avec le fichier, en lançant la même exception: L'accès au chemin 'C: \ Documents and Settings \ sk \ Paramètres locaux \ Temp \ IMG_0005 [1] .jpg' est refusé.

Il semble que les paramètres d'autorisation ont été copiés avec le fichier (c'est logique). Pour contourner le problème, j'ai demandé à mes utilisateurs d'utiliser le terrible petit assistant, de copier les fichiers dans un emplacement temporaire, puis de les sélectionner à cet endroit. Je n'aime pas ça, mais j'avais besoin de déployer cette fonctionnalité aujourd'hui. Avec une solution de contournement en place, je voudrais maintenant essayer de le faire fonctionner si possible. Idéalement, je pourrais simplement travailler avec le fichier sans le copier à d'autres endroits, etc. Ce que je ne comprends pas, c'est pourquoi le UnauthorizedAccessException est lancé. J'espère que quelqu'un a fait face à un défi similaire et peut partager quelques conseils sur la façon de travailler avec ces fichiers. Je préfèrerais ne pas utiliser l'intégralité de la route WIA et travailler avec les fichiers via l'interface de l'appareil photo.

Répondre

0

Le fichier est en lecture seule. J'aurais dû vérifier ça!

Bien sûr, il existe plusieurs façons de gérer cela. Au début je pensais "Je vais juste forcer l'attribut" lecture seule "mais ensuite je pensais" attendre, je ne devrais pas avoir besoin de faire ça, je suis après tout LECTURE du fichier "Bref histoire courte qui m'a fait regarder en profondeur ma bibliothèque IO et trouve que je ne déclenchaient pas explicitement FileAccess à lire comme je devrais:

public static byte[] ReadWholeFileBytes(string filename) 
{ 
    Guard.ArgumentNotNullOrEmptyString(filename, "filename"); 

    if(!File.Exists(filename)) 
    { 
     throw new FileNotFoundException("Failed finding file " + filename); 
    } 

    using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) 
    { 
     return ReadWholeStream(stream); 
    } 
} 

Cependant, pour le plaisir de faire cette réponse complète pour les autres, vous pouvez laisser tomber la lecture seule avec ce petit bout de code:

File.SetAttributes(openFile.FileName, FileAttributes.Normal);