FileOpen [v1.0.90+]

파일을 엽니다.

file := FileOpen(Filename, Flags [, Encoding])
선택

매개변수

Filename

열 파일의 경로. 절대 경로를 지정하지 않으면 A_WorkingDir에 있다고 간주됩니다.

[v1.1.17+]: 표준 입력/출력/에러 스트림을 열려면 별표를 (또는 별표 두 개를) 아래에 보여주는 바와 같이 지정하십시오:

FileOpen("*", "r")   ; 표준입력
FileOpen("*", "w")   ; 표준출력
FileOpen("**", "w")  ; 표준에러
Flags

[in v1.0.90+] 원하는 접근 모드를 가리키는 문자 그리고 다음에 다른 옵션이 따라와 구성된 문자열 (선택적으로 사이에 스페이스 또는 탭); 또는 [ v1.0.90+] 숫치 플래그의 조합 (합계). 지원되는 값들은 아래 테이블에 기술합니다.

Encoding

파일에 UTF-8 또는 UTF-16 바이트 순서 표식이 없을 때, 또는 h (핸들) 프래그가 사용될 때 텍스트 I/O에 사용할 코드 페이지입니다. 생략되면, A_FileEncoding의 현재 값이 사용됩니다.

Flags

  접근 모드 (서로-배타적임)
r0Read: 파일이 존재하지 않으면 실패합니다.
w1Write: 새 파일을 생성합니다, 기존의 파일을 덮어쓰기 합니다.
a2Append: 파일이 존재하지 않으면 새 파일을 생성합니다, 그렇지 않으면 파일 포인터를 파일의 끝으로 이동합니다.
rw3Read/Write: 파일이 존재하지 않으면 새 파일을 생성합니다.
h Filename이 객체 안에 싸 넣을 파일 핸들임을 나타냅니다. 공유 모드 플래그는 무시됩니다. 그리고 이 핸들이 가리키는 파일이나 스트림은 바이트 순서 표식이 점검되지 않습니다. 파일 핸들은 파일 객체가 파괴될 때 자동으로 잠기지 않습니다. 그리고 Close를 호출해 봐야 아무 효과도 없습니다. 주의 하십시오. Filename이 파이프나 통신 장치 같이 위치 지정이 안 되는(nonseeking) 장치를 가리키는 핸들이면 Seek, Tell 그리고 Length를 사용하면 안 됩니다.
  공유 모드 플래그
-rwd 읽기, 쓰기 그리고 지우기 접근을 위해 파일을 잠금니다. r, w 그리고 d을 조합해 사용해도 됩니다. -를 지정하면 -rwd를 지정한 것과 같습니다. 완전히 생략하면, 기본은 모든 접근을 공유하는 것입니다.
 0Flags가 숫치이면, 공유 모드 플래그가 없을 경우 파일이 잠깁니다.
 0x100read 접근을 공유합니다.
 0x200write 접근을 공유합니다.
 0x400delete 접근을 공유합니다.
  줄 끝(End of line (EOL)) 옵션
`n4읽을 때 `r`n`n으로 교체합니다. 그리고 쓸 때 `n`r`n으로 교체합니다.
`r8읽을 때 나홀로 `r`n으로 교체합니다.

반환 값

파일이 성공적으로 열리면, 반환 값은 파일 객체입니다.

함수가 실패하면, 반환 값은 0이고 [in v1.0.90+] A_LastError는 에러 코드가 담깁니다.

함수가 성공했는지 점검하려면 if file 또는 IsObject(file)를 사용하십시오.

논평

UTF-8 또는 UTF-16 파일이 생성될 때, 바이트 순서 표식이 파일에 씌여집니다. 단, Encoding (또는 Encoding을 생략하면 A_FileEncoding)에 "UTF-8-RAW" 또는 "UTF-16-RAW"이 담겨 있는 경우는 예외입니다.

UTF-8 또는 UTF-16 바이트 순서 표식(byte order mark (BOM))을 담고 있는 파일이 읽기 접근을 위해 열릴 때, BOM은 파일 포인터를 그 다음으로 이동해서 출력으로부터 제외됩니다. 그러므로, File.Position은 파일을 열고 난후 즉시 3 또는 2를 보고합니다.

관련 항목

FileEncoding, File Object, FileRead

예제

; 예제: 다음 스크립트는 텍스트를 파일에 쓴 다음 다시 메모리로 읽어 들입니다.
; 다음 DllCall-예제와 기능이 같습니다.

FileSelectFile, FileName, S16,, Create a new file:
if (FileName = "")
	return
file := FileOpen(FileName, "w")
if !IsObject(file)
{
	MsgBox Can't open "%FileName%" for writing.
	return
}
TestString := "This is a test string.`r`n"  ; 파일을 이런 식으로 쓸 때,  새 줄을 시작하려면 `n 말고 `r`n을 사용하십시오.
file.Write(TestString)
file.Close()

; 이제 파이을 다 썼으므로, 다시 메모리로 그 내용을 읽어 들입니다.
file := FileOpen(FileName, "r-d") ; 파일을 읽습니다 ("r"),  지우기 ("-d")만 빼고 모든 접근을 공유합니다.
if !IsObject(file)
{
	MsgBox Can't open "%FileName%" for reading.
	return
}
CharsToRead := StrLen(TestString)
TestString := file.Read(CharsToRead)
file.Close()
MsgBox The following string was read from the file: %TestString%
선택 | 내려받기
; 읽기 전용 모드로 스크립트를 엽니다. 그리고 그의 첫 줄을 읽습니다:
file := FileOpen(A_ScriptFullPath, "r")
MsgBox % file.ReadLine()

; 다음 데모를 보여주기 위해 콘솔 창을 엽니다:
DllCall("AllocConsole")
; 어플리케이션의 stdin/stdout 스트림을 새줄-변환 모드로 엽니다.
stdin  := FileOpen("*", "r `n")  ; Requires v1.1.17+
stdout := FileOpen("*", "w `n")
; 예전 버전에는 다음을 사용합니다:
;   stdin  := FileOpen(DllCall("GetStdHandle", "int", -10, "ptr"), "h `n")
;   stdout := FileOpen(DllCall("GetStdHandle", "int", -11, "ptr"), "h `n")
stdout.Write("Enter your query.`n\> ")
stdout.Read(0) ; 쓰기 버퍼를 비웁니다.
query := RTrim(stdin.ReadLine(), "`n")
stdout.WriteLine("Your query was '" query "'. Have a nice day.")
stdout.Read(0) ; 읽기 버퍼를 비웁니다.
Sleep 5000
선택 | 내려받기