2017-03-21 2 views
0

Je charge le flux dans le tampon et je l'utilise avec DataReader.Comment rechercher avec DataReader dans UWP

private async Task InitializeDataReader() 
{ 
    IBuffer buffer = await FileIO.ReadBufferAsync(_file).AsTask(); 
    _reader = DataReader.FromBuffer(buffer); 
    _reader.UnicodeEncoding = _encoding; 
} 

Mais parfois je besoin de chercher 1 octets retour de la position actuelle. c'était en fait possible pour beaucoup de lecteurs,

_reader.BaseStream.Seek(-1, SeekOrigin.Current); 

Mais il n'existe pas pour DataReader. Quelle est l'approche alternative dans UWP?

Si je ne devrais pas utiliser DataReader quelle est la classe alternative Windows.Storage.Streams

+0

Juste une supposition rapide, pouvez-vous faire '_reader.BaseStream.Position -;'? – Laith

+0

@Laith il n'a pas de BaseStream, ni de recherche. Je pense que cela ne supporte pas cela. –

+0

Essayez peut-être 'BinaryReader' à la place. Il enveloppe un «Stream» de votre choix et il est portable. – Laith

Répondre

0

Vous pouvez utiliser le flux et régler le flux chercher.

Buffer 2 flux: Stream stream = buffer.AsStream();

Streaming 2 IInputStream: IInputStream input = stream.AsInputStream();

DataReader d = new DataReader (entrée);

Vous pouvez utiliser stream.Seek pour définir la recherche.

0

Pour l'application UWP, DataReader CLAS ne fournissent pas cette méthode, comme lindexi suggéré, la voie possible est ici en utilisant la méthode de l'interface IRandomAccessStreamSeek(UInt64)

La méthode Seek prend en charge accès aléatoire aux fichiers. La recherche permet de déplacer la position de lecture/écriture à n'importe quelle position dans le fichier. Ceci est fait avec des paramètres de point de référence de décalage d'octet.

Par exemple:

// Create the input stream at position 0 so that the stream can be read 
// from the beginning. 
using (var inputStream = stream.GetInputStreamAt(0)) 
{ 
     inputStream.Seek(1);//Seeking 
     using (var dataReader = new Windows.Storage.Streams.DataReader(inputStream)) 
     {