2016-08-19 3 views
1

Disons que j'ai un fichier qui a déjà été téléchargé et écrit en utilisant un MediaElement. Donc pendant que le média est en cours de lecture, je veux télécharger et écrire le reste du fichier. Si j'utilise cette méthode, j'obtiens une erreur IOExecption indiquant que le fichier est déjà utilisé.Impossible d'utiliser la méthode Stream.Write lors de la lecture du même fichier dans MediaElement

using (Stream WriteStream = new FileStream(filename, FileMode.OpenOrCreate)) 
     { 
     WriteStream.Seek(seekpos, SeekOrigin.Begin); 
     WriteStream.Write(buffer, 0, buffer.Length); 
     WriteStream.Close(); 
     } 

Mais si j'utilise cette méthode, cela fonctionne très bien.

FileStream1 = new System.IO.FileStream(filename, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite); 
FileStream1.Write(buffer, 0, buffer.Length); 

Je pourrais utiliser la deuxième méthode, mais je veux être en mesure de rechercher et d'écrire à certaines positions que je ne peux pas faire en utilisant la deuxième méthode. Donc est-il de toute façon dans lequel je peux utiliser la première méthode. Cela a-t-il quelque chose à voir avec le FILEMODE ou FILEACCESS? Merci :)

Répondre

0

N'importe qui, je l'ai compris. Je peux l'utiliser pour chercher et écrire à n'importe quelle position. Stupide de ma part de ne pas m'en rendre compte.

FileStream1 = new System.IO.FileStream(filename, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite); 
FileStream1.Seek(seekpos,SeekOrigin.Begin); 
FileStream1.Write(buffer, 0, buffer.Length); 
0

Le plus proche que vous pourriez obtenir peut être affiché here avec ce que l'on appelle un flux synchronisé. Essentiellement, il s'agit de plusieurs threads agissant sur le même flux. Vous devez résoudre le problème de verrouillage, d'autant plus que vous n'avez aucun moyen de faire en sorte que MediaElement ouvre le fichier avec un verrou partagé.

Une autre approche pourrait être d'écrire dans un fichier pendant que MediaElement joue à partir d'un autre fichier. Lorsque MediaElement est fait avec le fichier A, jouez B et diffusez les téléchargements dans le nouveau fichier C. Répétez. Puis, à la fin, fusionnez-les ensemble.