2017-07-16 5 views
2

私はファイルが存在するかどうかを確認することができ、Golangでは以下の質問の回答によって知ることができます。Golangのディレクトリに、 `name`ファイル(拡張子付き)をチェックする方法はありますか?

のコードは次のようになります。

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

しかし、ここでは私の本当の問題だ、どのように私はファイル名が指定したディレクトリに(使用されています)が存在しないチェックしますか?私はこのようなファイルツリーがある場合例:私は任意のファイルがありますかどうかを確認したかった

--- uploads 
     |- foo.png 
     |- bar.mp4 

が指定した名前を使用します。..

used := filenameUsed("uploads/foo") 
fmt.Println(used) // Output: true 

used = filenameUsed("uploads/hello") 
fmt.Println(used) // Output: false 

にはどうすればfilenameUsed機能を実装していますか?

Googleは結果としてpath/filepathパッケージを私に渡しましたが、私はそれを使用する方法についての手がかりはありません。

答えて

1

filepath.Glob()関数を使用して、パターンを指定してファイルをリストすることができます。

使用するパターンは、基本的には、使用する場合はの拡張子のパターンで拡張します。

例:

func filenameUsed(name string) (bool, error) { 
    matches, err := filepath.Glob(name + ".*") 
    if err != nil { 
     return false, err 
    } 
    return len(matches) > 0, nil 
} 

それをテスト/使用:

fmt.Print("Filename foo used: ") 
fmt.Println(filenameUsed("uploads/foo")) 
fmt.Print("Filename bar used: ") 
fmt.Println(filenameUsed("uploads/bar")) 

出力例:

Filename foo used: true <nil> 
Filename bar used: false <nil> 

をしかし、filenameUsed()false(及びnilエラー)を返すことを意味するものではないことに注意してくださいその名前のファイルは存在しません。 1つ後に作成します。それをチェックし、そのようなファイルを作成しようとしても、アトミック性は保証されません。名前が使用されていない場合にファイルを作成することを目的としている場合は、適切なモードでファイルを作成し(存在する場合は上書きしないでください)、その呼び出しによって返された(作成)エラーを処理します。

関連する問題