Dom*_*nef 98
(*os.File).Stat()返回一个os.FileInfo值,该值又有一个Size()方法.因此,给定一个文件f,代码将类似于
fi, err := f.Stat()
if err != nil {
// Could not obtain stat, handle error
}
fmt.Printf("The file is %d bytes long", fi.Size())
Run Code Online (Sandbox Code Playgroud)
she*_*baw 49
如果您不想打开文件,可以直接调用os.Stat.
fi, err := os.Stat("/path/to/file");
if err != nil {
return err
}
// get the size
size := fi.Size()
Run Code Online (Sandbox Code Playgroud)
小智 13
稍微冗长的回答:
file, err := os.Open( filepath )
if err != nil {
log.Fatal(err)
}
fi, err := file.Stat()
if err != nil {
log.Fatal(err)
}
fmt.Println( fi.Size() )
Run Code Online (Sandbox Code Playgroud)
按照@shebaw 的说法(至少在 UNIX 操作系统中)调用 os.Stat 效率更高,原因是stat() is a Unix system call that returns file attributes about an inode,并且不需要处理打开文件。
注意:使用其他方法可能会导致 too many open files 多线程/并发应用程序,因为您打开文件以查询统计信息
这里的基准
func GetFileSize1(filepath string) (int64, error) {
fi, err := os.Stat(filepath)
if err != nil {
return 0, err
}
// get the size
return fi.Size(), nil
}
func GetFileSize2(filepath string) (int64, error) {
f, err := os.Open(filepath)
if err != nil {
return 0, err
}
defer f.Close()
fi, err := f.Stat()
if err != nil {
return 0, err
}
return fi.Size(), nil
}
Run Code Online (Sandbox Code Playgroud)
BenchmarkGetFileSize1-8 704618 1662 ns/op
BenchmarkGetFileSize2-8 199461 5668 ns/op
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38640 次 |
| 最近记录: |