150

Goコード内のファイルの存在を確認したいのです./conf/app.iniが、それを行うための良い方法が見つかりません。

JavaにFile:のメソッドがあることは知ってpublic boolean exists()います。これは、ファイルまたはディレクトリが存在する場合にtrueを返します。

しかし、これはGoでどのように行うことができますか?

4

6 に答える 6

225
// exists returns whether the given file or directory exists
func exists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil { return true, nil }
    if os.IsNotExist(err) { return false, nil }
    return false, err
}

エラー処理を追加するために編集されました。

于 2012-05-09T06:23:12.000 に答える
135

あなたはこれを使うことができます:

if _, err := os.Stat("./conf/app.ini"); err != nil {
    if os.IsNotExist(err) {
        // file does not exist
    } else {
        // other error
    }
}

参照: http: //golang.org/pkg/os/#IsNotExist

于 2012-05-09T06:15:36.980 に答える
31

参考までに、私の質問はすぐに検索できると思って数分間見回したので。

パスがGoの既存のディレクトリを表しているかどうかを確認するにはどうすればよいですか?

これは私の検索結果で最も人気のある答えでしたが、ここや他の場所では、ソリューションは存在チェックのみを提供します。が既存のディレクトリを表しているかどうかを確認するためpathに、簡単に次のことができることがわかりました。

path := GetSomePath();
if stat, err := os.Stat(path); err == nil && stat.IsDir() {
    // path is a directory
}

私の問題の一部は、path/filepathパッケージにisDir()関数が含まれていることを期待していたことでした。

于 2016-11-16T04:20:33.093 に答える
19

ファイルが存在するかどうかを確認する簡単な方法:

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

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

出典:

于 2018-06-28T07:35:32.500 に答える
0

次の関数を使用して、ディレクトリにエラーがないかどうかを確認します。ifこれは以前の回答と非常に似ていますが、 sをネストしないと、コードがより明確になると思います。これは、ディレクトリパスgo-homedirから削除し、より適切なエラーメッセージを返すために使用されますが、それらの機能が必要ない場合は、簡単に削除できます。~pkg/errors

// validateDirectory expands a directory and checks that it exists
// it returns the full path to the directory on success
// validateDirectory("~/foo") -> ("/home/bbkane/foo", nil)
func validateDirectory(dir string) (string, error) {
    dirPath, err := homedir.Expand(dir)
    if err != nil {
        return "", errors.WithStack(err)
    }
    info, err := os.Stat(dirPath)
    if os.IsNotExist(err) {
        return "", errors.Wrapf(err, "Directory does not exist: %v\n", dirPath)
    }
    if err != nil {
        return "", errors.Wrapf(err, "Directory error: %v\n", dirPath)

    }
    if !info.IsDir() {
        return "", errors.Errorf("Directory is a file, not a directory: %#v\n", dirPath)
    }
    return dirPath, nil
}

また、@ Dave Cのコメントを繰り返すために、ディレクトリの存在を確認する理由がファイルをそのディレクトリに書き込むためである場合は、通常、後でエラーを処理してディレクトリを開こうとする方がよいでしょう。

// O_EXCL - used with O_CREATE, file must not exist
file, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
if err != nil {
    return errors.WithStack(err)
}
defer file.Close()
于 2020-10-30T22:14:22.323 に答える
-3

ファイルが存在するかどうかを確認する簡単な方法があります。

if _, err := os.Stat("./conf/app.ini"); err != nil {
    if os.IsNotExist(err) {
        ..... //Shows error if file not exists
    } else {
       ..... // Shows success message like file is there
    }
}
于 2018-01-23T02:52:02.480 に答える