FileGetObject, fonction

Mise à jour : novembre 2007

Lit les données d'un fichier disque ouvert et les place dans une variable.

La fonctionnalité My permet une meilleure productivité et de meilleures performances dans les opérations d'E/S sur fichier que FileGetObject. Pour plus d'informations, consultez My.Computer.FileSystem, objet.

Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Object, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Short, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Integer, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Single, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Double, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Decimal, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Byte, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Boolean, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Date, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As System.Array, _
   Optional RecordNumber As Integer = -1, _
   Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As String, _
   Optional RecordNumber As Integer = -1, _
   Optional StringIsFixedLength As Boolean = False _
)

Paramètres

  • FileNumber
    Requis. Tout numéro de fichier valide.

  • Value
    Requis. Nom de variable valide destiné à recevoir les données lues.

  • RecordNumber
    Facultatif. Numéro de l'enregistrement (fichiers ouverts en mode Random) ou de l'octet (fichiers ouverts en mode Binary) par lequel la lecture débute.

  • ArrayIsDynamic
    Facultatif. S'applique uniquement à l'écriture d'un tableau. Spécifie si le tableau doit être considéré comme dynamique et par conséquent s'il est nécessaire d'écrire un descripteur de tableau décrivant la taille et les limites du tableau.

  • StringIsFixedLength
    Facultatif. S'applique uniquement lors de l'écriture d'une chaîne. Spécifie s'il est nécessaire d'écrire un descripteur à deux octets pour la chaîne décrivant la longueur. La valeur par défaut est False.

Notes

La fonction FileGetObject est utilisée à la place de FileGet afin d'éviter toute ambiguïté au moment de la compilation si le type Object est retourné au lieu d'un autre type, comme Integer, Long, Short, etc.

Si vous avez l'intention d'écrire le type Variant, la fonction FileGetObject est requise. En cas de doute, sachez que si vous utilisez un objet pour le deuxième paramètre, il est toujours plus sûr d'utiliser FilePutObject et FileGetObject.

FileGetObject est seulement valide en mode Random et Binary.

Les données lues à l'aide de la fonction FileGetObject sont généralement écrites avec la fonction FilePutObject.

Le premier enregistrement ou octet d'un fichier occupe la position 1, le deuxième enregistrement ou octet la position 2, et ainsi de suite. Si l'argument RecordNumber est omis, FileGetObject commence à lire l'enregistrement ou l'octet qui suit la dernière fonction FileGetObject ou FilePutObject (ou l'enregistrement ou l'octet désigné par la dernière fonction Seek).

Mode Random

Les règles suivantes s'appliquent aux fichiers ouverts en mode Random :

  • Si la longueur des données lues est inférieure à la longueur spécifiée dans la clause RecordLength de la fonction FileOpen, la fonction FileGetObject poursuit la lecture des enregistrements suivants conformément aux limites de longueur des enregistrements. L'espace compris entre la fin d'un enregistrement et le début de l'enregistrement suivant est rempli par le contenu de la mémoire tampon du fichier. Comme il est impossible de déterminer avec précision le volume des données de remplissage, il est généralement préférable que la longueur des enregistrements corresponde à la longueur des données lues.

  • Si la variable lue est une chaîne, la fonction FileGetObject lit par défaut un descripteur à deux octets contenant la longueur de la chaîne, puis elle lit les données qui sont placées dans la variable. La longueur d'enregistrement spécifiée par la clause RecordLength de la fonction FileOpen doit donc être supérieure d'au moins deux octets à la longueur réelle de la chaîne. Visual Basic 6.0 et les versions antérieures prennent en charge les chaînes de longueur fixe et, lors de leur lecture dans un fichier, le descripteur de longueur n'est pas écrit. Si vous souhaitez lire une chaîne sans descripteur, vous devez passer la valeur True au paramètre StringIsFixedLength de sorte que la chaîne lue soit de la longueur voulue.

  • Si la variable lue est un tableau, vous pouvez au besoin lire un descripteur de la taille et des dimensions du tableau. Pour lire le descripteur, affectez la valeur ArrayIsDynamic au paramètre True. Lors de la lecture du tableau, vous devez vous conformer à la manière dont il a été écrit. Si le tableau a été écrit avec le descripteur, vous devez lire le descripteur. Si le descripteur n'est pas employé, la taille et les limites du tableau passées à FileGetObject sont utilisées pour déterminer ce qu'il faut lire.

    Le descripteur spécifie le rang du tableau, la taille et les limites inférieures de chaque rang. Sa longueur est égale à 2 plus 8 fois le nombre de dimensions : 2 + 8 * NumberOfDimensions. La longueur d'enregistrement spécifiée par le paramètre RecordLength dans la fonction FileOpen doit être supérieure ou égale à la somme de tous les octets nécessaires à l'écriture des données et du descripteur du tableau. Par exemple, la déclaration de tableau suivante nécessite 118 octets pour l'écriture du tableau sur le disque :

    Dim MyArray(4,9) As Integer
    

    Les 118 octets se décomposent de la façon suivante : 18 octets pour le descripteur (2 + 8 * 2) et 100 octets pour les données (5 * 10 * 2).

  • La fonction FileGetObject lit les éléments de structures comme si chacun d'eux était lu de façon individuelle, à ceci près qu'il n'y a pas de remplissage entre les éléments. Sur un disque, un tableau dynamique d'un type défini par l'utilisateur (écrit avec la fonction FilePutObject) est préfixé d'un descripteur dont la longueur est égale à 2 plus 8 fois le nombre de dimensions : 2 + 8 * NumberOfDimensions. La longueur d'enregistrement spécifiée par la clause RecordLength dans la fonction FileOpen doit être supérieure ou égale à la somme de tous les octets nécessaires à la lecture des éléments individuels, incluant les tableaux et leurs descripteurs. La VBFixedStringAttribute, classe peut être appliquée aux champs de type chaîne dans les structures pour indiquer la taille de la chaîne lors de l'écriture sur le disque.

Mode Binary

Pour les fichiers ouverts en mode Binary, toutes les règles Random s'appliquent, à l'exception de ce qui suit :

  • La clause RecordLength de la fonction FileOpen n'a aucun effet. La fonction FileGetObject lit toutes les variables du disque de manière contiguë, c'est-à-dire sans remplissage entre les enregistrements.

  • Pour tout tableau autre que les tableaux d'une structure, la fonction FileGetObject ne lit que les données. Elle ne lit aucun descripteur.

FileGetObject lit les chaînes de longueur variable qui ne sont pas des éléments de structures, sans rechercher le descripteur de longueur à deux octets. Le nombre d'octets lus est égal au nombre de caractères de la chaîne.

Note de sécurité :

Lors de la lecture de fichiers, ne décidez pas du contenu d'un fichier en vous basant sur l'extension de son nom. Par exemple, un fichier nommé Form1.vb peut ne pas être un fichier source Visual Basic.

Exemple

L'exemple suivant lit un enregistrement dans un fichier de test, puis le récupère.

Dim c As Object = "test"
FileSystem.FileOpen(1, "test.dat", OpenMode.Binary)
FileSystem.FilePutObject(1, "ABCDEF")
FileSystem.Seek(1, 1)
FileSystem.FileGetObject(1, c)
MsgBox(c)
FileSystem.FileClose(1)

Notes du développeur sur Smart Device

Cette fonction n'est pas prise en charge.

Configuration requise

Espace de noms :Microsoft.VisualBasic

**Module :**FileSystem

**Assembly :**bibliothèque Visual Basic Runtime (dans Microsoft.VisualBasic.dll)

Voir aussi

Référence

FilePut, fonction

FileOpen, fonction

Seek, fonction

FileGet, fonction

Autres ressources

Lecture à partir de fichiers en Visual Basic

Écriture dans des fichiers en Visual Basic