こんにちは。scarvizです。
ファイル操作については色々書かれているのですが、ファイルサイズを調べるには
どうすれば良いのか分からなかったので、ちょっと調べてみました。
今回は「$GOROOT/src/pkg/os/file_unix.go」のソースコードを参考にしました。
■File型の変数からファイルサイズを調べる
ファイルをオープンした状態で色々扱ったりすると思うので、まずはFile型の変数からファイルサイズを取得する方法を紹介します。カレントディレクトリに「test.txt」というファイルを準備しています。
ファイルサイズは「102.5 kB (102,486 bytes)」です。
なお、以下のソースコードは「test.txt」がなくても新規に作成します。
package main
import (
"fmt"
"os"
)
func main() {
// カレントディレクトリ
cur, _ := os.Getwd()
// ファイルパス(カレントディレクトリのtest.txt)
filePath := cur + "/test.txt"
// ファイルが存在する場合は追記、存在しない場合は新規作成
file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
fmt.Println(err)
return
}
// クローズ処理の遅延実行
defer func(){
file.Close()
}()
// ファイル情報取得
fileinfo, staterr := file.Stat()
if staterr != nil {
fmt.Println(staterr)
return
}
// ファイルサイズを表示
fmt.Println(fileinfo.Size())
}
結果:
102486
ちなみにFile型変数からファイルパスを取得したい場合は
path := file.Name()
とすれば取れます。
■ファイルを開かずにファイルサイズを調べる
大きなサイズのファイルを扱うなど、いちいち開かずにファイルサイズだけ調べたいという場合もあると思います。
ファイルパスからファイルサイズを調べる方法を紹介します。
package main
import (
"fmt"
"os"
)
func main() {
// カレントディレクトリ
cur, _ := os.Getwd()
// ファイルパス(カレントディレクトリのtest.txt)
filePath := cur + "/test.txt"
// ファイルパスからファイル情報取得
fileinfo, staterr := os.Stat(filePath)
if staterr != nil {
fmt.Println(staterr)
return
}
// ファイルサイズを表示
fmt.Println(fileinfo.Size())
}
結果:
102486
この方法は指定したファイルパスにファイルが存在しない場合はstaterrがnilでないので、仮にファイルの存在チェックをしたいというのでも使えますね。
0 件のコメント:
コメントを投稿