FileRead

파일의 내용을 변수 안으로 읽습니다.

FileRead, OutputVar, Filename

매개변수

OutputVar

The name of the output variable in which to store the retrieved data. 문제가 일어나면 예를 들어 파일이 "사용 중"이거나 존재하지 않으면 (이 경우 ErrorLevel은 1로 설정됩니다) OutputVar는 비워집니다. Filename이 빈 파일이어도 비워집니다 (이 경우 ErrorLevel은 0이 설정됩니다).

Filename

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

옵션: 파일의 이름 앞에 바로 0 개 이상의 다음 문자열이 나타날 수도 있습니다. 각 옵션은 옵션 사이에 단일 스페이스 또는 탭으로 분리하십시오. 예를 들어: *t *m5000 C:\Log Files\200601.txt.

*c: ClipboardAll 파일 또는 다른 이진 데이터를 적재합니다. *c 옵션이 존재하면 다른 모든 옵션은 무시됩니다.

*m1024: 이 옵션이 생략되면, 전체 파일은 메모리가 모자라지 않는 한 적재됩니다. 이런 경우 에러 메시지가 나타납니다. 그리고 쓰레드는 종료합니다 (그러나 이를 피하려면 Try를 사용할 수 있습니다). 그렇지 않으면, 1024를 바이트 개수의 십진수 또는 십육진 수로 교체하십시오. 파일이 이 보다 크면, 오직 그의 앞 부분만 적재됩니다.

주의: 이 때문에 마지막 줄은 `r`n이 아니라 캐리지 리턴 홀로 (`r) 끝나는 결과를 초래할 수 있습니다.

*t: 캐리지 리턴 & 라인피드 (`r`n)가 나타나면 모두 라인피드 (`n)로 바꿉니다. 그렇지만, 이 변환은 수행성능을 줄입니다. 그리고 보통 필요하지 않습니다. 예를 들어, `r`n이 포함된 텍스트는 이미 Gui Edit 콘트롤에 추가될 올바른 형식입니다. 비슷하게, FileAppend는 새 파일을 열 때 `r`n이 있는지 탐지합니다; 각 `r`n을 있는 그대로 쓸 줄 압니다. `r`r`n으로 변환하지 않습니다. 마지막으로, 파일 끝이 `r`n로 끝나든 그냥 `n로 끝나든 상관없이 다음 파싱 회돌이는 올바르게 작동할 것입니다: Loop, parse, MyFileContents, `n, `r.

*Pnnn: [AHK_L 42+]: FileEncoding이 설정한 기본 인코딩을 오버라이드 합니다. 여기에서 nnn은 숫치 코드 페이지 식별자입니다.

에러 처리

[v1.1.04+]: 이 명령어는 실패하면 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.

ErrorLevel은 적재가 성공하면 0이 설정됩니다. 문제가 일어나면 1이 설정됩니다. 예를 들면: 1) 파일이 존재하지 않는다; 2) 파일이 잠겨 있거나 접근이 불가능하다; 3) 시스템에 파일을 적재할 메모리가 충분하지 않다.

A_LastError는 운영 체제의 GetLastError() 함수의 결과가 설정됩니다.

이진 데이터 읽기

파일, 매개변수 그리고 기본 설정에 따라, FileRead는 파일 데이터를 텍스트로 이해하고 그것을 스크립트가 사용하는 고유의 인코딩으로 변환합니다. 이 때문에 파일에 이진 데이터가 들어 있을 경우 문제를 야기할 수 있습니다. 다음 경우는 예외입니다:

주목하십시오. 일단 데이터를 OutputVar를 읽어 들였다면, 오토핫키 명령어와 함수에 오직 (존재한다면) 첫 이진 0 앞의 텍스트만 "보여집니다". 그렇지만, 전체 내용은 여전히 존재하고 NumGet() 같은 고급 방식으로 접근할 수 있습니다.

마지막으로, FileOpen() 그리고 File.RawRead() 또는 File.ReadNum() 먼저 전체 파일을 메모리로 읽어 들일 필요 없이 이진 데이터를 읽는 데 사용할 수 있습니다.

논평

목적이 파일의 모든 내용 또는 일부를 메모리로 읽어 들이는 것일 때, 파일-읽기 회돌이를 사용하는 것보다 FileRead가 수행성능이 훨씬 더 좋습니다.

크기가 1 GB가 넘는 파일은 ErrorLevel에 1이 설정되고 그리고 OutputVar는 비워집니다. 단, *m 옵션이 존재하면 예외입니다. 이 경우는 파일의 앞부분이 적재됩니다.

FileRead는 #MaxMem을 준수하지 않습니다. 너무 많은 메모리를 사용할까 걱정이 되면, FileGetSize으로 미리 파일 크기를 점검하십시오.

FileOpen()은 FileRead보다 고급 기능을 제공합니다. 예를 들어 파일 전체를 메모리로 읽어 들일 필요 없이 특정한 위치에 데이터를 읽고 쓸 수 있습니다. 함수 리스트는 파일 객체를 참조하십시오.

FileEncoding, FileOpen() / File Object, file-reading loop, FileReadLine, FileGetSize, FileAppend, IniRead, Sort, UrlDownloadToFile

예제

텍스트 파일을 OutputVar로 읽어 들입니다.

FileRead, OutputVar, C:\My Documents\My File.txt

파일의 내용을 신속하게 정렬합니다.

FileRead, Contents, C:\Address List.txt
if not ErrorLevel  ; 성공적으로 적재됨.
{
    Sort, Contents
    FileDelete, C:\Address List (alphabetical).txt
    FileAppend, %Contents%, C:\Address List (alphabetical).txt
    Contents := ""  ; 메모리를 풀어줍니다.
}