Golang에서 Mkdir을 사용하여 중첩 된 디렉토리를 만드는 방법은 무엇입니까?
'dir1 / dir2 / dir3'과 같은 Go 실행 파일에서 중첩 된 디렉터리 집합을 만들려고합니다. 이 줄을 사용하여 단일 디렉터리를 만드는 데 성공했습니다.
os.Mkdir("." + string(filepath.Separator) + c.Args().First(),0777);
그러나 해당 디렉토리 내부에 미리 결정된 중첩 디렉토리 집합을 만드는 방법을 모르겠습니다.
os.Mkdir
단일 디렉토리를 만드는 데 사용됩니다. 폴더 경로를 만들려면 대신 다음을 사용해보십시오.
os.MkdirAll(folderPath, os.ModePerm)
func MkdirAll (path string, perm FileMode) 오류
MkdirAll은 필요한 부모와 함께 path라는 디렉토리를 만들고 nil을 반환합니다. 그렇지 않으면 오류를 반환합니다. 권한 비트 perm은 MkdirAll이 생성하는 모든 디렉토리에 사용됩니다. 경로가 이미 디렉토리이면 MkdirAll은 아무 작업도 수행하지 않고 nil을 반환합니다.
편집하다:
os.ModePerm
대신 올바르게 사용하도록 업데이트되었습니다 .
파일 경로를 연결하려면 path/filepath
@Chris의 대답에 설명 된대로 package 를 사용하십시오 .
이렇게하면 매직 넘버를 사용할 필요가 없습니다.
os.MkdirAll(newPath, os.ModePerm)
또한 +를 사용하여 경로를 만드는 대신 다음을 사용할 수 있습니다.
import "path/filepath"
path := filepath.Join(someRootPath, someSubPath)
위는 각 플랫폼에서 자동으로 올바른 구분 기호를 사용합니다.
문제가 필요한 모든 상위 디렉토리를 만드는 것이라면 os.MkDirAll()
MkdirAll
필요한 부모와 함께 path라는 디렉터리를 만들고 nil을 반환하거나 그렇지 않으면 오류를 반환합니다.
path_test.go은 그것을 사용하는 방법에 대한 좋은 그림 :
func TestMkdirAll(t *testing.T) {
tmpDir := TempDir()
path := tmpDir + "/_TestMkdirAll_/dir/./dir2"
err := MkdirAll(path, 0777)
if err != nil {
t.Fatalf("MkdirAll %q: %s", path, err)
}
defer RemoveAll(tmpDir + "/_TestMkdirAll_")
...
}
( 이 답변 에서 언급했듯이 합리적인 권한 값을 지정해야합니다. )
이를 해결하기 위해 다음과 같은 유틸리티 방법을 사용할 수 있습니다.
import (
"os"
"path/filepath"
"log"
)
func ensureDir(fileName string) {
dirName := filepath.Dir(fileName)
if _, serr := os.Stat(dirName); serr != nil {
merr := os.MkdirAll(dirName, os.ModePerm)
if merr != nil {
panic(merr)
}
}
}
func main() {
_, cerr := os.Create("a/b/c/d.txt")
if cerr != nil {
log.Fatal("error creating a/b/c", cerr)
}
log.Println("created file in a sub-directory.")
}
This is one alternative for achieving the same but it avoids race condition caused by having two distinct "check ..and.. create" operations.
package main
import (
"fmt"
"os"
)
func main() {
if err := ensureDir("/test-dir"); err != nil {
fmt.Println("Directory creation failed with error: " + err.Error())
os.Exit(1)
}
// Proceed forward
}
func ensureDir(dirName string) error {
err := os.MkdirAll(dirName, os.ModeDir)
if err == nil || os.IsExist(err) {
return nil
} else {
return err
}
}
참고URL : https://stackoverflow.com/questions/28448543/how-to-create-nested-directories-using-mkdir-in-golang
'development' 카테고리의 다른 글
PHP-특정 문자열로 시작하는 배열에서 모든 키 가져 오기 (0) | 2020.10.25 |
---|---|
슬라이스 된 "스크린"터미널에서 위아래로 스크롤하는 방법 (0) | 2020.10.25 |
한 번에 여러 값을 postgres 테이블에 삽입하는 방법은 무엇입니까? (0) | 2020.10.25 |
Google Maps API V3에서 fitBounds ()를 사용한 후 setZoom () 사용 (0) | 2020.10.25 |
Python에서 구분 된 줄에 목록 요소 인쇄 (0) | 2020.10.25 |