Programmation C sharp/Entrées-sorties
Les fonctions d'entrées-sorties utilisent l'espace de nom System.IO
.
La classe Stream
[modifier | modifier le wikicode]La classe abstraite Stream
possède des méthodes permettant à la fois de lire et d'écrire. Cependant, l'écriture ou la lecture peut ne pas être autorisée (fichier en lecture seule, ...).
Propriétés
[modifier | modifier le wikicode]La classe Stream
possède les propriétés suivantes :
bool CanRead
- (lecture seule) Cette propriété vaut
true
quand la lecture est possible. bool CanWrite
- (lecture seule) Cette propriété vaut
true
quand l'écriture est possible. bool CanSeek
- (lecture seule) Cette propriété vaut
true
quand le positionnement dans le flux est possible (méthodeSeek
ou propriétéPosition
). bool CanTimeout
- (lecture seule) Cette propriété vaut
true
quand le flux peut expirer (fin de connexion pour une socket, ...). long Length
- (lecture seule) Longueur du flux en nombre d'octets.
long Position
- Position courante dans le flux en nombre d'octets depuis le début.
int ReadTimeout
- Temps imparti pour la méthode
Read
, en millisecondes. L'accès à cette propriété peut déclencher le lancement d'une exception de typeInvalidOperationException
si la fonctionnalité n'est pas supportée. int WriteTimeout
- Temps imparti pour la méthode
Write
, en millisecondes. L'accès à cette propriété peut déclencher le lancement d'une exception de typeInvalidOperationException
si la fonctionnalité n'est pas supportée.
Méthodes
[modifier | modifier le wikicode]Les méthodes de la classe Stream
sont les suivantes :
void Close()
- Ferme le flux.
void Dispose()
- Libère les ressources occupées par le flux.
void Flush()
- Cette méthode vide les buffers d'écriture vers le support associé (fichier, socket, ...).
int ReadByte()
- Cette méthode lit un octet et retourne sa valeur, ou -1 en cas d'erreur.
void WriteByte(byte value)
- Cette méthode écrit un octet.
int Read(byte[] buffer, int offset, int count)
- Cette méthode lit
count
octets dans le buffer spécifié, à partir de l'offsetoffset
dans le tableaubuffer
. Elle retourne le nombre d'octets effectivement lus. void Write(byte[] buffer, int offset, int count)
- Cette méthode écrit
count
octets du tableaubuffer
dont le premier octet est situé à l'offsetoffset
. void Seek(long offset, SeekOrigin origin)
- Déplace le pointeur d'écriture/lecture de offset octets depuis l'origine indiquée:
SeekOrigin.Begin
: depuis le début du flux,SeekOrigin.End
: à partir de la fin du flux,SeekOrigin.Current
: à partir de la position courante dans le flux.
void SetLength(long value)
- Cette méthode modifie la longueur totale du flux (troncature ou remplissage avec des octets nuls).
Méthodes asynchrones
[modifier | modifier le wikicode]Les méthodes Read
et Write
utilisant un tableau d'octet existent également en version asynchrone :
IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback, object)
.int EndRead(IAsyncResult result)
.IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback, object)
.void EndWrite(IAsyncResult result)
.
Membres statiques
[modifier | modifier le wikicode]La classe Stream
possède également deux membres statiques :
- La constante
Null
est un flux dont la lecture ou l'écriture ne produit aucun effet. - La méthode statique
Synchronized
retourne une version synchronisée du flux passé en paramètre.
Fonctions asynchrones
[modifier | modifier le wikicode]Les fonctions dont le retour peut prendre du temps existent également en version asynchrone. La méthode appelée est alors celle dont le nom commence par Begin
. Elle demande au pool de threads standard d'exécuter l'opération. Une fois l'opération terminée, le delegate passé à la fonction Begin
doit appeler la fonction End
correspondante pour récupérer le résultat.
Exemple
[modifier | modifier le wikicode]Cet exemple utilise la version asynchrone de la méthode Read
de la classe Stream
.
class LectureAsync
{
private byte[] buffer = new byte[4000];
public void commencerLecture(Stream s)
{
// Commencer la lecture
IAsyncResult iar = s.BeginRead(buffer, 0, buffer.length, finLecture, s);
// et retour immédiat
// La méthode finLecture transmise en 4ème paramètre sera appelée
// quand la lecture du tableau d'octets sera terminée.
}
public void finLecture(IAsyncResult result) //AsyncCallback
{
// Stream : le dernier argument transmis à BeginRead
Stream s=(Stream)result.AsyncState;
// récupérer le nombre d'octets lus
int nb_octets = s.EndRead(result);
}
}
Flux de fichier
[modifier | modifier le wikicode]La classe FileStream
dérive de la classe Stream
. Elle possède donc les mêmes méthodes.
La classe FileStream
possède les constructeurs suivants :
public FileStream(string path, System.IO.FileMode mode,
[ System.IO.FileAccess access,
[ System.IO.FileShare share,
[ int bufferSize,
[ System.IO.FileOptions options ] ] ] ] );
public FileStream(string path, System.IO.FileMode mode,
[ System.IO.FileAccess access,
[ System.IO.FileShare share,
[ int bufferSize,
[ bool useAsync ] ] ] ] );
public FileStream(string path, System.IO.FileMode mode,
System.Security.AccessControl.FileSystemRights rights,
System.IO.FileShare share,
int bufferSize, System.IO.FileOptions options,
[ System.Security.AccessControl.FileSecurity fileSecurity ] );
Les crochets indiquent les paramètres optionnels.