FileSystem.FileGetObject(Int32, Object, Int64) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Lit les données d’un fichier disque ouvert dans une variable. La My fonctionnalité vous offre une meilleure productivité et des performances dans les opérations d’E/S de fichier que FileGetObject. Pour plus d’informations, consultez FileSystem.
public static void FileGetObject(int FileNumber, ref object Value, long RecordNumber = -1);
static member FileGetObject : int * obj * int64 -> unit
Public Sub FileGetObject (FileNumber As Integer, ByRef Value As Object, Optional RecordNumber As Long = -1)
Paramètres
- FileNumber
- Int32
Required. N’importe quel numéro de fichier valide.
- Value
- Object
Required. Nom de variable valide dans lequel les données sont lues.
- RecordNumber
- Int64
Optional. Numéro d’enregistrement (Random fichiers en mode) ou nombre d’octets (Binary fichiers en mode) au démarrage de la lecture.
Exemples
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)
Remarques
La FileGetObject fonction est utilisée au lieu d’éviter les ambiguïtés au moment de FileGet la compilation si le type Object est retourné au lieu d’un autre type, tel que Integer, Long, Shortet ainsi de suite.
Si vous envisagez d’écrire le Variant type, FileGetObject il est nécessaire. En cas de doute, si vous utilisez un objet pour le deuxième paramètre, il est toujours suggéré d’utiliser FilePutObject et FileGetObject.
FileGetObjectest valide uniquement en mode et Binary en Random mode.
Les données lues avec FileGetObject sont généralement écrites avec FilePutObject.
Dans un fichier, le premier enregistrement ou octet se trouve à la position 1, le deuxième enregistrement ou octet se trouve à la position 2, etc. Si vous ne spécifiez qu'un enregistrement, seul ce dernier est verrouillé ou déverrouillé. Si vous omettez RecordNumber, FileGetObject lit l’enregistrement ou l’octet après la dernière FileGetObject ou FilePutObject fonction (ou pointé par la dernière Seek fonction).
Mode aléatoire
Pour les fichiers ouverts en Random mode, les règles suivantes s’appliquent :
Si la longueur des données lues est inférieure à la longueur spécifiée dans la
RecordLengthclause de laFileOpenfonction,FileGetObjectlit les enregistrements suivants sur les limites de longueur d’enregistrement. L’espace compris entre la fin d’un enregistrement et le début de l’enregistrement suivant est rempli par le contenu de la zone tampon du fichier. Étant donné que la quantité de données de remplissage ne peut pas être déterminée précisément, il est judicieux d’avoir la longueur de l’enregistrement correspondant à la longueur des données lues.Si la variable en cours de lecture est une chaîne, par défaut
FileGetObjectlit un descripteur à deux octets contenant la longueur de la chaîne, puis lit les données qui entrent dans la variable. Par conséquent, la longueur d’enregistrement spécifiée par laRecordLengthclause de laFileOpenfonction doit être au moins deux octets supérieurs à la longueur réelle de la chaîne. Visual Basic 6.0 et versions antérieures prennent en charge les chaînes de longueur fixe et lorsqu’elles sont lues dans un fichier, le descripteur de longueur n’est pas écrit. Si vous souhaitez lire une chaîne sans descripteur, vous devez passerTrueauStringIsFixedLengthparamètre et la chaîne dans laquelle vous lisez doit être la longueur correcte.Si la variable en cours de lecture est un tableau, la longueur d’enregistrement spécifiée par le
RecordLengthparamètre de laFileOpenfonction doit être supérieure ou égale à la somme de tous les octets requis pour écrire les données du tableau et le descripteur de tableau. Le descripteur spécifie le rang du tableau, la taille et les limites inférieures pour chaque rang. Sa longueur est égale à 2 plus 8 fois le nombre de dimensions : 2 + 8 * NumberOfDimensions.Par exemple, la déclaration de tableau suivante nécessite 218 octets lorsque le tableau est écrit sur disque :
Dim MyArray(4, 9) As IntegerLes 218 octets sont distribués comme suit : 18 octets pour le descripteur (2 + 8 * 2) et 100 octets pour les données (5 * 10 * 4).
FileGetObjectlit des éléments de structures comme s’ils étaient lus individuellement, sauf qu’il n’y a pas de remplissage entre les éléments. Sur le disque, un tableau dynamique dans un type défini par l’utilisateur (écrit avecFilePutObject) est précédé 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 laRecordLengthclause de laFileOpenfonction doit être supérieure ou égale à la somme de tous les octets requis pour lire les éléments individuels, y compris les tableaux et leurs descripteurs. La VBFixedStringAttribute classe peut être appliquée aux champs de chaîne dans les structures pour indiquer la taille de la chaîne lorsqu’elle est écrite sur le disque.
Mode binaire
Pour les fichiers ouverts en Binary mode, toutes les Random règles s’appliquent, à l’exception suivante :
La
RecordLengthclause de la fonction n’aFileOpenaucun effet.FileGetObjectlit toutes les variables du disque contiguëment, c’est-à-dire sans remplissage entre les enregistrements.Pour tout tableau autre qu’un tableau d’une structure,
FileGetObjectlit uniquement les données. Elle ne lit aucun descripteur.
FileGetObject lit des chaînes de longueur variable qui ne sont pas des éléments de structures sans attendre le descripteur de longueur à deux octets. Le nombre d’octets lus est égal au nombre de caractères de la chaîne.
Important
Lors de la lecture à partir de fichiers, ne prenez pas de décisions sur le contenu d’un fichier en fonction de l’extension de nom de fichier. Par exemple, un fichier nommé Form1.vb peut ne pas être un fichier source Visual Basic.