FilePut 함수
업데이트: 2007년 11월
변수에서 디스크 파일로 데이터를 씁니다.
My 기능은 파일 I/O 작업에서 생산성 및 성능이 FilePut보다 우수합니다. 자세한 내용은 My.Computer.FileSystem 개체를 참조하십시오.
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Double, _
RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FilePut( _
FileNumber As Integer, _
Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Public Overloads Sub FilePut (
FileNumber As Integer,
Value As String, _
Optional RecordNumber As Integer = -1,
Optional StringIsFixedLength As Boolean = False
)
매개 변수
FileNumber
필수적 요소. 임의의 유효한 파일 번호입니다.Value
필수적 요소. 디스크에 쓴 데이터를 포함하고 있는 유효한 변수 이름입니다.RecordNumber
선택적 요소. 쓰기가 시작되는 레코드 번호(Random 모드 파일) 또는 바이트 번호(Binary 모드 파일)입니다.ArrayIsDynamic
선택적 요소. 배열을 쓰는 경우에만 적용됩니다. 배열을 동적으로 처리할 것인지의 여부와 길이를 설명하는 문자열에 대한 배열 설명자를 쓸 것인지의 여부를 지정합니다.StringIsFixedLength
선택적 요소. 문자열을 쓸 때만 적용합니다. 문자열에 대한 2바이트의 문자열 길이 설명자를 파일에 쓸지 여부를 지정합니다. 기본값은 False입니다.
예외
예외 형식 |
오류 번호 |
조건 |
---|---|---|
RecordNumber가 1보다 작고 –1은 아닙니다. |
||
FileNumber가 없습니다. |
||
파일 모드가 잘못되었습니다. |
비구조적 오류 처리를 사용하는 Visual Basic 6.0 응용 프로그램을 업그레이드하는 경우에는 "오류 번호" 열을 참조하십시오. 오류 번호를 Number 속성(Err 개체)과 비교할 수 있습니다. 그러나 가능하면 이러한 오류 제어 방법을 Visual Basic의 구조적 예외 처리 개요에 설명된 방식으로 바꾸는 것이 좋습니다.
설명
FilePut은 Random 및 Binary 모드에서만 유효합니다.
FilePut를 사용하여 데이터를 쓴 경우 보통 FileGet를 사용하여 파일에서 읽습니다.
파일에서 첫째 레코드나 바이트는 위치 1에 있고 둘째 레코드와 바이트는 위치 2에 있으며 이와 같은 식으로 계속 이어집니다. RecordNumber를 생략하면 마지막 FileGet 또는 FilePut 함수 다음의 레코드나 바이트 또는 마지막 Seek 함수가 가리키는 레코드나 바이트를 씁니다.
StringIsFixedLength 인수는 함수가 문자열을 변수로 해석할지 고정 길이로 해석할지를 제어합니다. 인수가 True일 경우 FilePut은 길이 설명자를 쓰지 않습니다. FilePut에 StringIsFixedLength = True를 사용할 경우 FileGet에도 동일하게 하고 해당 문자열이 예상된 길이로 초기화되는지 확인해야 합니다.
Random 모드
Random 모드로 연 파일에는 다음 규칙이 적용됩니다.
쓰고 있는 데이터의 길이가 FileOpen 함수의 RecordLength 절에 지정된 길이보다 짧으면 FilePut은 레코드 길이 경계에 후속 레코드를 씁니다. 한 레코드 끝 지점과 다음 레코드 시작 지점 사이에는 파일 버퍼의 기존 내용이 채워집니다. 채워지는 데이터 양이 명확하지 않으므로 대개 레코드 길이를 쓰여지는 데이터의 길이와 일치시키는 것이 좋습니다. 쓰여지는 데이터의 길이가 FileOpen 함수의 RecordLength 절에 지정된 길이보다 길면 예외가 throw됩니다.
문자열 변수를 쓰는 경우 FilePut은 문자열 길이가 포함된 2바이트 설명자를 쓴 다음 변수의 데이터를 씁니다. 따라서 FileOpen 함수의 RecordLength 절에 지정한 레코드 길이는 실제 문자열 길이보다 최소한 2바이트는 더 커야 합니다.
쓰고 있는 변수에 숫자 형식이 포함되어 있으면 FilePut는 개체의 VarType을 식별하는 2바이트를 쓴 다음 해당 변수를 씁니다. 예를 들어, 정수가 포함되어 있는 개체를 쓸 때 FilePut는 6바이트를 씁니다. 그 중 2바이트는 개체를 VarType(3), 즉 Integer로 식별하는 데 쓰고 4바이트는 데이터를 포함합니다. FileOpen 함수의 RecordLength 매개 변수로 지정한 레코드 길이는 해당 변수를 저장하는 데 필요한 실제 바이트 수보다 2바이트 이상 커야 합니다.
쓰여지는 변수가 문자열을 포함하는 개체인 경우 FilePut 함수는 해당 개체의 VarType(8)을 식별하는 2바이트 설명자와 문자열의 길이를 나타내는 2바이트 설명자를 쓴 다음 문자열 데이터를 씁니다. FileOpen 함수의 RecordLength 매개 변수로 지정한 레코드 길이는 문자열의 실제 길이보다 4바이트 이상 더 커야 합니다. 설명자 없이 문자열을 지정하려면 StringIsFixedLength 매개 변수에 True를 전달해야 합니다. 또 읽을 문자열은 정확한 길이여야 합니다.
쓰여지는 변수가 배열인 경우 해당 배열의 크기와 차원에 대한 설명자를 쓸지 여부를 선택할 수 있습니다. Visual Basic 6.0 및 이전 버전에서는 동적 배열의 경우 파일 설명자를 쓰지만 고정 크기 배열의 경우 파일 설명자를 쓰지 않습니다. Visual Basic 2005에서는 기본적으로 설명자를 쓰지 않습니다. 설명자를 쓰려면 ArrayIsDynamic 매개 변수를 True로 설정합니다. 배열을 쓰는 경우 해당 배열을 읽는 방법을 일치시켜야 합니다. 배열이 설명자와 함께 읽히는 경우 해당 설명자를 써야 합니다. 설명자는 배열 순위, 크기 및 각 순위에 대해 하한을 지정합니다. 길이는 2에 차원 수의 8배를 더한 것입니다. 즉, (2 + 8 * NumberOfDimensions)입니다. FileOpen 함수의 RecordLength 절에서 지정한 레코드 길이는 배열 데이터와 배열 설명자를 작성하는 데 필요한 총 바이트 수보다 크거나 같아야 합니다. 예를 들어, 다음과 같이 배열을 선언하면 해당 배열을 디스크에 쓸 때 118바이트가 필요합니다.
Dim MyArray(4,9) As Integer
쓰여지는 변수가 가변 길이 문자열이나 개체가 아닌 다른 형식의 변수인 경우 FilePut 함수는 변수 데이터만 씁니다. FileOpen 함수의 RecordLength 절에 지정한 레코드의 길이는 쓰여지는 데이터의 길이보다 크거나 같아야 합니다.
FilePut 함수는 구조체 각 요소를 개별적으로 쓰는 것처럼 구조체 요소를 쓰지만 요소 사이를 채우지는 않습니다. 구조체의 문자열 필드에 VBFixedString 특성을 적용하면 문자열을 디스크에 쓸 때 해당 문자열의 크기를 나타낼 수 있습니다.
참고: VBFixedString 특성에 지정된 것보다 바이트 수가 많은 문자열 필드는 디스크에 기록될 때 잘립니다.
Binary 모드
Binary 모드에서 연 파일의 경우 몇 가지 예외를 제외하고 Random 모드 규칙이 대부분 적용됩니다. Binary 모드에서 연 파일에 대한 다음 규칙은 Random 모드에 대한 규칙과 다릅니다.
FileOpen 함수의 RecordLength 절은 아무 효과가 없습니다. FilePut는 끊임 없이 모든 변수를 디스크에 기록합니다. 즉, 각 레코드 사이에 다른 데이터가 채워지지 않습니다.
배열이 구조체 내에 있는 배열이 아닌 경우 FilePut 함수는 데이터만 쓰며 설명자는 쓰지 않습니다.
FilePut 함수는 구조체의 요소가 아닌 가변 길이 문자열을 쓸 때 2바이트 설명자를 쓰지 않습니다. 쓰여진 바이트의 수는 문자열의 문자 수와 같습니다. 예를 들어, 다음 문은 1번 파일에 11바이트를 씁니다.
Dim hellow As String = "Hello World" FilePut(1,hellow)
FilePut 함수를 사용하여 파일에 쓰려면 FileIOPermissionAccess 열거형으로부터 Write 액세스 권한이 필요합니다.
예제
다음 예제에서는 FilePut 함수를 사용하여 파일에 데이터를 씁니다. Person 구조체의 다섯 레코드가 파일에 쓰여집니다.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
스마트 장치 개발자 참고 사항
이 함수는 지원되지 않습니다.
요구 사항
네임스페이스:Microsoft.VisualBasic
**모듈:**FileSystem
**어셈블리:**Visual Basic 런타임 라이브러리(Microsoft.VisualBasic.dll)