Opens a file to read specific content from it and/or to write new content into it.
file := FileOpen(Filename, Flags , Encoding)
열 파일의 경로. 절대 경로를 지정하지 않으면 A_WorkingDir에 있다고 간주됩니다.
[v1.1.17+]: 표준 입력/출력/에러 스트림을 열려면 별표를 (또는 별표 두 개를) 아래에 보여주는 바와 같이 지정하십시오:
FileOpen("*", "r") ; 표준입력
FileOpen("*", "w") ; 표준출력
FileOpen("**", "w") ; 표준에러
[in AHK_L 54+] 원하는 접근 모드를 가리키는 문자 그리고 다음에 다른 옵션이 따라와 구성된 문자열 (선택적으로 사이에 스페이스 또는 탭); 또는 [ AHK_L 42+] 숫치 플래그의 조합 (합계). 지원되는 값들은 아래 테이블에 기술합니다.
파일에 UTF-8 또는 UTF-16 바이트 순서 표식이 없을 때, 또는 h (핸들) 프래그가 사용될 때 텍스트 I/O에 사용할 코드 페이지입니다. 생략되면, A_FileEncoding의 현재 값이 사용됩니다.
| Flag | 십진수 값 | 십육진수 값 | 설명 |
|---|---|---|---|
| r | 0 | 0x0 | Read: 파일이 존재하지 않으면 실패합니다. |
| w | 1 | 0x1 | Write: 새 파일을 생성합니다, 기존의 파일을 덮어쓰기 합니다. |
| a | 2 | 0x2 | Append: 파일이 존재하지 않으면 새 파일을 생성합니다, 그렇지 않으면 파일 포인터를 파일의 끝으로 이동합니다. |
| rw | 3 | 0x3 | Read/Write: 파일이 존재하지 않으면 새 파일을 생성합니다. |
| h | Filename이 객체 안에 싸 넣을 파일 핸들임을 나타냅니다. 공유 모드 플래그는 무시됩니다. 그리고 이 핸들이 가리키는 파일이나 스트림은 바이트 순서 표식이 점검되지 않습니다. 파일 핸들은 파일 객체가 파괴될 때 자동으로 잠기지 않습니다. 그리고 Close를 호출해 봐야 아무 효과도 없습니다. 주의 하십시오. Filename이 파이프나 통신 장치 같이 위치 지정이 안되는(nonseeking) 장치를 가리키는 핸들이면 Seek, Tell 그리고 Length를 사용하면 안 됩니다. |
| Flag | 십진수 값 | 십육진수 값 | 설명 |
|---|---|---|---|
| -rwd | 읽기, 쓰기 그리고 지우기 접근을 위해 파일을 잠금니다. r, w 그리고 d을 조합해 사용해도 됩니다. -를 지정하면 -rwd를 지정한 것과 같습니다. 완전히 생략하면, 기본은 모든 접근을 공유하는 것입니다. |
||
| 0 | 0x0 | Flags가 숫치이면, 공유 모드 플래그가 없을 경우 파일이 잠깁니다. | |
| 256 | 0x100 | read 접근을 공유합니다. | |
| 512 | 0x200 | write 접근을 공유합니다. | |
| 1024 | 0x400 | delete 접근을 공유합니다. |
| Flag | 십진수 값 | 십육진수 값 | 설명 |
|---|---|---|---|
| `n | 4 | 0x4 | 읽을 때 `r`n을 `n으로 교체합니다. 그리고 쓸 때 `n을 `r`n으로 교체합니다. |
| `r | 8 | 0x8 | 읽을 때 나홀로 `r을 `n으로 교체합니다. |
파일이 성공적으로 열리면, 반환 값은 파일 객체입니다.
함수가 실패하면, 반환 값은 0이고 [in AHK_L 54+] 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를 보고합니다.
텍스트를 파일에 쓴다음 다시 메모리로 읽어 들입니다 (다음 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()
Demonstrates the usage of the standard input/output streams.
; 다음 데모를 보여주기 위해 콘솔 창을 엽니다:
DllCall("AllocConsole")
; 어플리케이션의 stdin/stdout 스트림을 새줄-변환 모드로 엽니다.
stdin := FileOpen("*", "r `n") ; [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