파일
파일 및 디렉터리 작업은 구성표 개발에 필수적입니다. 출력을 저장하든, 리소스를 로드하든, 프로젝트 구조를 구성하든 파일 작업을 이해하면 스크립트가 더욱 강력하고 사용자 친화적이게 됩니다.
이 페이지에서는 경로 읽기, 디렉터리 생성, GUI 매개변수를 통한 폴더 입력 수집 등 일반적인 파일 및 디렉터리 작업을 다룹니다.
사용자의 홈 디렉토리
Lumi는 Linux 전용이므로 사용자의 홈 디렉터리는 HOME 환경 변수에서 나옵니다.
사용자의 홈 디렉토리를 문자열로 얻으려면:
(getenv "HOME")예제 출력:
"/home/username"디렉터리 구분 기호
플랫폼별 경로 구분 기호인 전역 변수 DIR-SEPARATOR도 있습니다. Lumi(Linux)에서는 항상 /입니다.
> DIR-SEPARATOR
"/"디렉토리 위치 얻기
플러그인에 대한 구성표 대화 상자에서 사용자에게 디렉토리 위치를 요청할 수 있습니다.
(scheme-register
"scheme-batch-process"
"Batch Process"
"Iteratively open the source files, then process, export and close"
"Mark Sweeney"
"Under GNU GENERAL PUBLIC LICENSE Version 3"
"2025"
""
SF-DIRNAME "Loca_tion of Source" ""
SF-DIRNAME "Location of _Destination" ""
SF-TOGGLE "S_how Loaded Images" 0
SF-TOGGLE "Only Process Open I_mages" 0)SF-DIRNAME은 디렉토리에 대한 브라우저를 제공합니다.
(define (batch-process-file-system src-dir src-dir-fallback extension dst-dir dst-dir-fallback show-images process-fn export-fn)
(let* ((validated-src-dir (validate-path-and-dir src-dir src-dir-fallback "Source"))
(validated-dst-dir (validate-path-and-dir dst-dir dst-dir-fallback "Destination"))
(files (discover-files validated-src-dir extension)))
;; …
))여기서는 두 디렉터리 입력(소스 및 대상)의 유효성을 검사하고 GUI 경로가 비어 있거나 유효하지 않은 경우 기본값으로 돌아갑니다.
/hub/scripting/plug-ins/batch-process/
구현 세부 사항에 관심이 있는 경우 validate-path-and-dir에 대한 플러그인 소스를 검색하세요.
디렉토리 만들기
Scheme은 디렉터리를 생성하기 위한 dir-make 명령을 제공합니다. 이 명령은 “/“로 구분된 경로를 사용하고 권한에 대한 선택적 매개변수가 있는 단일 디렉터리를 생성합니다. 우리는 플랫폼별 경로를 제공하지 않습니다.
일반적으로 실제 경로를 위해 여러 디렉터리를 만들어야 합니다. 여기서는 dir-make에 대한 래퍼를 사용하여 도움을 받을 수 있습니다.
;; 목적: 플랫폼에서 지정된 경로를 생성하는 (dir-make) 래퍼
;; 제공된 경로. dir-make에는 항상 Linux 스타일 구분자를 출력.
(define (make-dir-path path)
(let* ((path-parts (strbreakup path DIR-SEPARATOR))
(current-path (car path-parts))) ; 루트 디렉터리
;; 나머지 디렉터리를 단계별로 생성
(for-each
(lambda (part)
(set! current-path (string-append current-path "/" part)) ; 경로 구성
(if (file-exists? current-path)
(debug-message "Directory exists: " current-path)
(if (dir-make current-path)
(debug-message "Made directory: " current-path)
(warning-message "Failed to make directory: " current-path))))
(cdr path-parts))))참고: 이 함수는 또한 내장된 file-exists?을 사용하여 불필요한 호출을 건너뜁니다. 표시된 파일이나 디렉터리가 존재하면 #t를 반환하고, 존재하지 않거나 요청하는 사용자가 액세스할 수 없으면 #f를 반환합니다.
경로 구성
또한 Scheme에서 경로를 분해하고 다시 구축해야 합니다.
경로를 여러 부분으로 분할하려면 strbreakup을 사용합니다.
Linux 경로 예
> (strbreakup (getenv "HOME") DIR-SEPARATOR)
("" "home" "username")
> (strbreakup "/this/path/" DIR-SEPARATOR)
("" "this" "path" "")참고: 선행 및 후행 슬래시는 결과 목록에서 빈 문자열 요소가 됩니다.
경로를 다시 작성하려면 string-append을 사용하십시오.
Linux 경로 구축
> (string-append (getenv "HOME") DIR-SEPARATOR "myfolder" DIR-SEPARATOR "myfile.xcf")
"/home/username/myfolder/myfile.xcf"