다음을 통해 공유


FileGetObject 함수

업데이트: 2007년 11월

열린 디스크 파일에서 변수로 데이터를 읽습니다.

My 기능은 파일 입출력 작업에서 생산성 및 성능이 FileGetObject보다 우수합니다. 자세한 내용은 My.Computer.FileSystem 개체를 참조하십시오.

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 _
)

매개 변수

  • FileNumber
    필수적 요소. 임의의 유효한 파일 번호입니다.

  • Value
    필수적 요소. 데이터를 읽어들일 유효한 변수 이름입니다.

  • RecordNumber
    선택적 요소. 읽기를 시작할 레코드 번호(Random 모드 파일) 또는 바이트 번호(Binary 모드 파일)입니다.

  • ArrayIsDynamic
    선택적 요소. 배열을 쓰는 경우에만 적용됩니다. 배열을 동적으로 처리할 것인지의 여부와 그에 따라 배열의 크기와 범위를 설명하는 배열 설명자를 쓸 것인지의 여부를 지정합니다.

  • StringIsFixedLength
    선택적 요소. 문자열을 쓸 때만 적용합니다. 길이를 설명하는 문자열에 대해 2바이트 설명자를 쓸 것인지의 여부를 지정합니다. 기본값은 False입니다.

설명

컴파일 타임에 Integer, Long, Short등의 형식이 아닌 Object 형식이 반환되는 경우 모호성을 피할 수 있도록 FileGet 대신 FileGetObject 함수를 사용합니다.

Variant 형식을 쓸 경우 FileGetObject가 필요합니다. 둘째 매개 변수에 대한 개체를 사용하고 있는지가 명확하지 않은 경우 FilePutObject와 FileGetObject를 사용하는 것이 좋습니다.

FileGetObject는 Random 모드와 Binary 모드에서만 사용할 수 있습니다.

FileGetObject를 사용하여 읽은 데이터는 보통 FilePutObject를 사용하여 씁니다.

파일에서 첫째 레코드나 바이트는 위치 1에 있고 둘째 레코드와 바이트는 위치 2에 있으며 이와 같은 식으로 계속 이어집니다. RecordNumber를 생략하면 FileGetObject는 마지막 FileGetObject 또는 FilePutObject 함수 다음의 레코드나 바이트(또는 마지막 Seek 함수에서 가리키는 레코드나 바이트)를 읽습니다.

Random 모드

Random 모드로 연 파일에는 다음 규칙이 적용됩니다.

  • 읽을 데이터의 길이가 FileOpen 함수의 RecordLength 절에 지정한 길이보다 짧으면 FileGetObject는 레코드 길이 경계에 맞게 다음 레코드를 읽습니다. 한 레코드 끝 지점과 다음 레코드 시작 지점 사이에는 파일 버퍼의 기존 내용이 채워집니다. 채워지는 데이터의 양은 정확하게 확인할 수 없기 때문에 읽고 있는 데이터 길이와 레코드 길이를 일치시키는 것이 좋습니다.

  • 읽고 있는 변수가 문자열이면 FileGetObject는 기본적으로 해당 문자열 길이를 포함하고 있는 2바이트 설명자를 읽은 다음 변수에 전달되는 데이터를 읽습니다. 따라서 FileOpen 함수의 RecordLength 절로 지정한 레코드 길이는 문자열의 실제 길이보다 2바이트 이상 더 길어야 합니다. Visual Basic 6.0과 그 이전 버전에서는 고정 길이 문자열을 지원므로 파일을 읽을 때 길이 설명자가 기록되지 않습니다. 설명자 없이 문자열을 읽으려면 StringIsFixedLength 매개 변수에 True를 전달해야 하며, 읽어들일 문자열의 길이는 정확해야 합니다.

  • 읽어들이고 있는 변수가 배열이면 해당 배열의 크기와 차원에 대한 설명자를 작성할 수 있습니다. 설명자를 읽으려면 ArrayIsDynamic 매개 변수를 True로 설정합니다. 배열을 읽는 경우에는 배열이 쓰여진 방식을 일치시킬 필요가 있습니다. 설명자로 작성한 것이면 해당 설명자를 읽을 필요가 있습니다. 설명자를 사용하지 않으면 FileGetObject에 전달된 배열의 크기와 범위에 따라 읽을 내용이 결정됩니다.

    설명자는 배열 순위, 크기 및 각 순위에 대해 하한을 지정합니다. 길이는 2에 차원 수의 8배를 더한 값인 2 + 8 * NumberOfDimensions입니다. FileOpen 함수의 RecordLength 매개 변수로 지정한 레코드 길이는 배열 데이터와 배열 설명자를 쓰는 데 필요한 총 바이트 수보다 크거나 같아야 합니다. 예를 들어, 다음 배열 선언에서 디스크에 배열을 쓰는 경우 118바이트가 있어야 합니다.

    Dim MyArray(4,9) As Integer
    

    이 118바이트에서 18바이트(2 + 8 * 2)는 설명자에, 100바이트(5 * 10 * 2)는 데이터에 할당됩니다.

  • FileGetObject는 구조체의 각 요소를 개별적으로 읽는 것처럼 구조체 요소를 읽지만 요소 사이를 채우지는 않습니다. 디스크에서 FilePutObject로 작성한 사용자 정의 형식의 동적 배열 다음에는 설명자가 옵니다. 이 설명자의 길이는 2에 차원 수의 8배를 더한 값인 2 + 8 * NumberOfDimensions입니다. FileOpen 함수의 RecordLength 절에서 지정한 레코드 길이는 배열과 그 설명자를 포함하여 개별 요소를 읽는 데 필요한 총 바이트 수보다 크거나 같아야 합니다. VBFixedStringAttribute 클래스를 구조체의 문자열 필드에 적용하면 디스크에 쓸 때 문자열의 크기를 나타낼 수 있습니다.

Binary 모드

Binary 모드로 연 파일에는 다음과 같은 예외와 함께 모든 Random 규칙이 적용됩니다.

  • FileOpen 함수의 RecordLength 절은 의미가 없습니다. FileGetObject는 레코드 사이를 채우지 않고 연속적으로 모든 변수를 디스크에서 읽습니다.

  • 구조체의 배열이 아닌 다른 배열의 경우 FileGetObject는 데이터만 읽습니다. 설명자는 읽지 않습니다.

FileGetObject는 구조체의 요소가 아닌 가변 길이 문자열을 2바이트 길이 설명자 없이 읽습니다. 읽은 바이트 수는 이미 문자열에 있는 문자 수와 같습니다.

보안 정보:

파일을 읽을 때 파일 확장명을 기준으로 파일 내용을 짐작해서는 안 됩니다. 예를 들어, Form1.vb라는 파일이 Visual Basic 소스 파일이 아닐 수도 있습니다.

예제

다음 예제는 테스트 파일에 레코드를 읽은 다음 검색합니다.

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)

스마트 장치 개발자 참고 사항

이 함수는 지원되지 않습니다.

요구 사항

네임스페이스:Microsoft.VisualBasic

**모듈:**FileSystem

어셈블리:

참고 항목

참조

FilePut 함수

FileOpen 함수

Seek 함수

FileGet 함수

기타 리소스

Visual Basic에서 파일 읽기

Visual Basic에서 파일에 쓰기