Reinstate Monica
그는 물었다 8년 전
390

여부를 확인할 수 있는 파일이 있는 어떻게 됐어?

39 의 표준 라이브러에 함수은 고안되었습니다 go& 전적으로 여부를 확인할 수 있는 파일이 방관하겠나 (그것을비유하사 Python& # 39 의 ['오스트발트하드렉시츠'] [1]). What is the 성어는 방법은 무엇일까요?

[1]: http://docs.python.org/library/os.path.html # 오스트발트하드렉시츠

Denys Séguret
그는 8년 전 댓글을 달았습니다
0

내가 don& # 39, t really 이해했소. 이와 함께 답을 자네가 말하도다 표준 함수은 진실이며당신이 표준 기능을 쓸 수 없다. 내가 뭘 놓친거야? # 39, 적어도 shouldn& 해결될 문제는 아니다.

zzzz
그는 8년 전 댓글을 달았습니다
11

좋은 질문을 하는 것을 하나의 파일 되었다. 야, 이 탈피한 b/c 특성상 실제로 얻은 정보는 아무것도 할 수 있다고 하지만 더 이상 존재하지 않을 수 있는 파일 위에 "타임 - 있을경우에. 이 방법은 실적호전 간단히 파일을 열고 확인란 실패할 경우 방관하겠나.

Sergio Acosta
그는 일 년 전 댓글을 달았습니다
1

@zzzz (그러니까말이야 it& # 39 의 한 몇 년은 된 것, 이 새로운 판독기에서 셀명 캐비닛용입니다) I agree 일반적인 경우에. 하지만 내 애플리케이션 로드 라이브러리 파일 경로는 지그포츠 않고 데이터를 처리하는 경우 일부 제 3 자에게 초기화하지 파일이 존재하지 않습니다. 내 생각에 이것은 유효함 책정안 열려고 할 수 있는 파일의 경우, 이를 확인하는 비투 충돌 등 치명적인 오류 없이 보고하십시오 내 코드 doesn& # 39, 직접 파일을 쓸 내용이나 파일을 읽을 필요가 없다.

답변 8 개

39, 파일 doesn& 여부를 확인할 수 있을 때, t, s '에 해당하는 Python& # 39 오스트발트하드렉시츠 않을 경우 (파일_이름)'.

if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
  // path/to/whatever does not exist
}

39 에 해당하는 "만약 파일이 있는 확인하려면 python& 오스트발트하드렉시츠 (파일_이름) '.

편집됩니다: 최근 당 주석

if _, err := os.Stat("/path/to/whatever"); err == nil {
  // path/to/whatever exists

} else if os.IsNotExist(err) {
  // path/to/whatever does *not* exist

} else {
  // Schrodinger: file may or may not exist. See err for details.

  // Therefore, do *NOT* use !os.IsNotExist(err) to test for file existence

}

colminator
lidaobing
그는 7년 전 댓글을 달았습니다
3

예를 들어, '대신' 노렉시스트 에노디르 반품해야 어떨 땐 ',' 이 '있을 때, / etc / / / etc / 바시르 바시르 포바 반환되므로 에노디르' ''

sqweek
그는 5년 전 댓글을 달았습니다
41

두 번째 스니핏 더 세밀하게 잘못된. 조건 (방황케) ''! 오스지아노테시스트 합니다. # 39 의 '실패' 오스릭스테 it& 가능한 파일이 존재하지만, 다른 이유로 (예: 권한이 있는 디스크임). '실패' 로 잘못 사용하여 파일 분류하고, 방황케 = 모두 같은 조건으로 &quot exist&quot, 않습니다.

tangxinfa
그는 3년 전 댓글을 달았습니다
9

잘못된 파일이 있는 여부를 확인할 수 있다. 이 경우 모두 방황케 파일이 존재합니다.

    • 로 오토메이티드 케일럽이요 스페어를 실린 [고노츠] [1] 메일링 리스트.

&gt. [.] # 39 의 it& 실제로 필요한 것은 매우 자주 [.] '는' 오스릭스테 사용하여 경우를 쉽게 할 수 있는 것이 필요합니다.

&gt. [.] 예를 들면 다음과 같습니다. # 39 의 파일을 열고 예정이면 there& 첫 여부를 확인할 수 있을 이유가 없다. 어쨌든 간에, 파일 안에 사라질 수 검사 및 개설, # 39 오스트로펜 상관 없이 '오류' ll you& 확인해야 한다. 그래서 호출하십시오 (방황케) '' 오스지아노테시스트 시도하시겠습니까 후에는 됩니다 해당 파일을 열 수 있어, 및 거래 색상에는 비존재 (필요한 경우 특수 처리).

&gt. [.] # 39 don& 경로에 대한 기존 전혀 확인할 필요가 있습니다, t (진실이며당신이 shouldn& # 39, t).

&gt. - '여부를 패스이므로 오s. 케디라공' 는 이미 존재합니다. (또한 호출하십시오 오류 것을 확인해야 한다.)

&gt. 사용하는 대신 ',' - '로스 스크리트 콩지름에 오스트로펜필레 (경로, os. O_RDWR os.O_CREATE os.O_EXCL, 0666) '. # 39, ll 이쪽요 you& 오류가 발생할 경우 해당 파일이 이미 있습니다. 또한, 이 doesn& # 39 와 달리 무언가 할 수 있도록 파일 경합이 없는 버전이 존재를 확인하는 신청했다.

출처: msg/golang-nuts/ayx-bmndmfo/4rl8ffhr8v4j https://groups.google.com/forum/ #!

[1]: msg/golang-nuts/ayx-bmndmfo/4rl8ffhr8v4j https://groups.google.com/forum/ #!

이 ' ()' 와 ' ()' 기능을 콩지름에 오스릭스테 오스지아노테시스트 다음과 같이 예:

// Exists reports whether the named file or directory exists.
func Exists(name string) bool {
    if _, err := os.Stat(name); err != nil {
        if os.IsNotExist(err) {
            return false
        }
    }
    return true
}

예를 들면 [here] [1] 에서 추출됩니다.

[1]: https://github.com/noll/mjau/blob/master/util/util.go # L42

Afriza N. Arief
Michael
그는 5년 전 댓글을 달았습니다
10

주의해야 합니다. 이 코드는 지적한 대로 https://stackoverflow.com/a/22467409/712014 파일이 없으면 진정한 되돌려줍니다 할지라도, 예를 들어 통계 () 가 권한을 거부됩니다.

예 의해 user11617 잘못되었습니다. 또 해당 파일이 있는 경우에도 보고하십시오 않니다 아니라 다른 정렬하려면 일부 오류가 발생했습니다.

서명 (string) (부울 오류:) 가 있어야 합니다. 그리고, 이 때문에 호츨 사이트는 일이 나은 게 없다.

코드) 로 더 잘 할 것이라고 썼다.

func Exists(name string) bool {
    _, err := os.Stat(name)
    return !os.IsNotExist(err)
}

하지만 난 이 제안하세요 대신:

func Exists(name string) (bool, error) {
  _, err := os.Stat(name)
  if os.IsNotExist(err) {
    return false, nil
  }
  return err != nil, err
}

Afriza N. Arief
xlm
그는 6년 전 댓글을 달았습니다
7

예 5 무엇입니까? 당신이 고유해야 .하십시오.

David Duncan
그는 3년 전 댓글을 달았습니다
1

두 번째 예제에서와 데스트루스트로이 하는 여러 반환 값, 즉 _을 방황케: = os. Stat (이름)

idbrii
그는 일 년 전 댓글을 달았습니다
5

모두 모두 '=' 왜 '대신' 방황케 복귀하십시오 방황케! =? # 39 의 경우, 해당 파일을 there& 오류가 아마도 doesn& # 39, t 어디일까요?

    _, err := os.Stat(file)
    if err == nil {
        log.Printf("file %s exists", file)
    } else if os.IsNotExist(err) {
        log.Printf("file %s not exists", file)
    } else {
        log.Printf("file %s stat error: %v", file, err)
    }

함수 예제:

func file_is_exists(f string) bool {
    _, err := os.Stat(f)
    if os.IsNotExist(err) {
        return false
    }
    return err == nil
}

그러나 실제로 어떤 경로를 다른 답을 도래하도록하려하는 누락했습니다 함수은 디렉토리여야. 물론, 같은 기능을 할 수 있는 경로는 매우 절실해졌습니다.

"' 부울 피레렉시츠 func (파일_이름 문자열) { 정보, 방황케: = os. Stat (파일_이름) 만약 os. 아노테시스트 (방황케) { 거짓값 반품하십시오. } 린포스시디르 복귀하십시오! () }

"'

또 지적하는: 이 코드는 계속 이어질 수 있는 다른 경쟁 상태 또는 프로세스 또는 지정된 파일을 만들 수 있고, 피레렉시츠 스레드할 deletes 함수은 실행되고 있습니다.

39 이 경우, re in your 스래드입니다 잠급니다 you& 걱정이 사용할 경우, 이 함수 또는 여러 개의 응용 프로그램이 사용하는 프로세스 간 세마포가 직렬화할 액세스하려면 있었다. 외부에 있는 경우 관련된 다른 응용 프로그램이 you& 컨트롤이거나, # 39, re 아웃해야 운빨이야, 그런 것 같아요.

39 의 몇 가지 기능을 모두 제공하는 애스펙트에서 let& 보면 첫째, "os" 패키지 "고랭" 가 무슨 뜻이냐고 않습니다를 유틸리티와의 하지만 오류 검사 프로그램, 즉, 단 한 번의 래퍼 오류를 처리할 수 있는 크로스 플랫폼.

그래서 기본적으로, 만약 "오스릭스테" 만약 이 함수가 doesn& # 39, 즉, 모든 파일은 오류 안 줘 기존 않니다 경우 어떤 종류의 오류가 확인해야 합니다 (here comes the 사용하는 것은, 이 두 함수 "오스지아노테시스트" 와 "오스트리스시스트."

이 파일의 오류 때문에 "상태" 로 이해할 수 있도록 하고 있는지, 아니면 doesn& t # 39 는 몇 가지 문제가 존재하지 않고 던지기 때문에 오류가 있습니다.

이 형식은 "오류" 있을 수 있지만, 이러한 기능을 시행하십시오 매개변수입니다 벗어날 수 있지만, "모두" # 39 이 wouldn& 쉽게 이해할 수 없다.

또한 이 사실을 가리키는 "이즈시스트 같은 아노테시스트 아니다!", 이들은 서로 다른 두 가지 방법을 전지전능하심이라

이제 궁금해할까봐 선호하는 가, 내가 가장 좋은 방법은 해당 파일이 존재할 수 있다.

if _, err := os.Stat(path/to/file); !os.IsNotExist(err){
   //TODO
}