2013-01-21 2 views
0

Wow, est-ce plus compliqué que nécessaire. Quelqu'un peut-il me expliquer pourquoi le code suivant fonctionne:FileIO avec Windows Rt et C#

 string stringToWrite = "SomeStuff"; 
     Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current; 
     Windows.Storage.StorageFolder installedLocation = package.InstalledLocation; 
     var files = await installedLocation.GetFilesAsync(); 
     foreach (Windows.Storage.StorageFile sf in files) 
     { 
      if (sf.Name.Equals("log.txt")) 
      { 
       await FileIO.AppendTextAsync(sf, stringToWrite); 

      } 
     } 

Et pourtant ce qui suit échoue avec AccessDenied:

 Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current; 
     Windows.Storage.StorageFolder installedLocation = package.InstalledLocation; 
     var log = await installedLocation.GetFileAsync("log.txt"); 
     await FileIO.AppendTextAsync(log, stringToWrite); 

La seule différence est Boucler dans les fichiers renvoyés par la méthode GetFilesAsync vs obtenir le fichier de nom. A propos, obtenir le nom par nom du fichier fonctionne parce que si j'obtiens une faute d'orthographe log.txt dans GetFileAsync, j'obtiens une exception.

Très confus ....

+0

cette ligne est la différence dans vos deux exemples 'fichiers var = attendent installedLocation.GetFilesAsync();' la méthode selon MSDN 'Obtient les fichiers de haut niveau dans le dossier en cours ' – MethodMan

+0

Je sais, on obtient un seul storageFile et l'autre renvoie une collection que je boucle ensuite à travers le get le fichier unique. L'accès au fichier doit être le même en ce qui concerne la lecture/écriture, non? – mrasmussen

+0

Parlez-vous de Windows Runtime ou parlez-vous du système d'exploitation appelé Windows RT? – Charles

Répondre

1

Vous devriez pas utiliser votre emplacement installé pour écrire des fichiers. Il est censé être en lecture seule selon MSDN: File Access/Permissions in Windows Store Apps:

répertoire d'installation de l'application est un emplacement en lecture seule. Vous ne pouvez pas accéder au répertoire d'installation via le sélecteur de fichiers.

Vous devez utiliser soit les Local, Roaming ou Temporary emplacements de stockage.

Voir ce lien: MSDN: Quickstart Local Application Data

+0

Mais pourquoi cela fonctionne-t-il dans l'un des cas? – svick

+0

qui a semblé fonctionner, merci SiLo. Je ne sais pas pourquoi je pourrais écrire dans le fichier si j'ai fait une boucle dans la collection, mais pas si j'ai obtenu le nom du fichier. J'aurais dû voir que le chemin d'installation n'était pas un endroit recommandé pour écrire. – mrasmussen

+0

Comment avez-vous créé 'log.txt' la première fois? J'ai essayé de reproduire ceci, et la seule manière que je pourrais même obtenir le dossier là était de créer le dossier par l'intermédiaire de l'explorateur de Windows d'abord, alors cela fonctionnerait. J'ai eu l'accès refusé des exceptions en essayant de créer/ajouter au fichier dans le code. – Erik

Questions connexes