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