2017-06-14 1 views
0

Je rencontre un problème avec la classe StreamReader. Sur la page de documentation StreamReader Class, il indique qu'il prend en charge les plates-formes Windows universelles (UWP) sous l'en-tête Informations de version, «Universal Windows Platform - Available since 8». Suite à une inspection plus approfondie de ses constructeurs, les constructeurs StreamReader (Stream) prennent en charge les applications UWP, mais les constructeurs StreamReader(String) ne les prennent pas en charge.Conversion d'un StreamReader (String) pour être compatible avec l'API UWP?

J'utilise actuellement le constructeur StreamReader (String) avec le chemin complet du fichier à être lu,

using (StreamReader sr = new StreamReader(path)) 
{ 
    ... 
} 

Je cherche à apprendre comment convertir mon code pour une StreamReader (String) à un StreamReader (Stream).

+0

Est-ce que [this] (https://stackoverflow.com/questions/1879395/how-to-generate-a-stream-from-a-string) ce que vous voulez accomplir? – Kilazur

+0

Est-ce que vous tapez un nom de fichier ou une chaîne. Pour lire une chaîne, utilisez StringReader (string). La chaîne d'un StreamReader est un nom de fichier. – jdweng

+0

@Kilazur, dans un sens oui. Je veux utiliser le chemin. – jtth

Répondre

0

Dans UWP StreamReader accepte uniquement Stream avec Options supplémentaires. Pas de chaîne.

donc d'utiliser StreamReader d'un chemin particulier, vous devez obtenir le StorageFile

StorageFile file = await StorageFile.GetFileFromPathAsync(<Your path>); 
var randomAccessStream = await file.OpenReadAsync(); 
Stream stream = randomAccessStream.AsStreamForRead(); 
StreamReader str = new StreamReader(stream); 
0

fini par résoudre mon problème! La documentation est sur place.

De

using (StreamReader sr = new StreamReader(path)) 
{ 
    ... 
} 

Pour

using (FileStream fs = new FileStream(path, FileMode.Open)) 
{ 
    using (StreamReader sr = new StreamReader(fs)) 
    { 
     ... 
    } 
} 

Simple et élégant. Merci encore à tous ceux qui ont contribué!

+0

Vous obtiendrez une erreur ACCESS_DENIED si le chemin est en dehors des dossiers de l'application. –

+1

Bienvenue dans l'environnement [sandboxed] (https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions)! Vous devez obtenir une instance de [StorageFile] (https://docs.microsoft.com/en-us/uwp/api/windows.storage.storagefile), généralement via un [FileOpenPicker] (https://docs.microsoft .com/fr/uwp/api/windows.storage.pickers.fileopenpicker), puis utilisez la méthode dans la réponse d'AVK. Vous ne pouvez pas accéder directement aux fichiers en utilisant un chemin. –

+0

@MehrzadChehraz Je crois que c'est exactement ce qui m'arrive ... Y at-il une solution de contournement ou une solution connue? Je dois être en mesure d'accéder aux fichiers en dehors des dossiers de l'application builds car c'est un programme dynamique qui fonctionnera pour n'importe quel utilisateur. L'un des [paramètres FileStreams] (https://msdn.microsoft.com/fr-fr/library/system.io.filestream (v = vs.110) .aspx) fonctionnerait-il ici? – jtth