Files and Directories
File Info
os.Stat reports details about a file, such as its name, size, and whether it is a directory.
file info
File info is metadata about a path, separate from the file contents.
File Info
file_info.go
Replay: real traced execution (multi-file project)
package main
import (
"fmt"
"os"
)
func main() {
var label = "report"
fileName := "go09_file_info.txt"
content := label + ":ready"
err := os.WriteFile(fileName, []byte(content), 0644)
if err != nil {
fmt.Println("created=", false)
return
}
defer os.Remove(fileName)
info, err := os.Stat(fileName)
if err != nil {
fmt.Println("found=", false)
return
}
fmt.Println("name=", info.Name())
fmt.Println("size=", info.Size())
fmt.Println("isDir=", info.IsDir())
}
package main
import (
"fmt"
"os"
)
func main() {
var label = "summary"
fileName := "go09_file_info.txt"
content := label + ":ready"
err := os.WriteFile(fileName, []byte(content), 0644)
if err != nil {
fmt.Println("created=", false)
return
}
defer os.Remove(fileName)
info, err := os.Stat(fileName)
if err != nil {
fmt.Println("found=", false)
return
}
fmt.Println("name=", info.Name())
fmt.Println("size=", info.Size())
fmt.Println("isDir=", info.IsDir())
}
package main
import (
"fmt"
"os"
)
func main() {
var label = "log"
fileName := "go09_file_info.txt"
content := label + ":ready"
err := os.WriteFile(fileName, []byte(content), 0644)
if err != nil {
fmt.Println("created=", false)
return
}
defer os.Remove(fileName)
info, err := os.Stat(fileName)
if err != nil {
fmt.Println("found=", false)
return
}
fmt.Println("name=", info.Name())
fmt.Println("size=", info.Size())
fmt.Println("isDir=", info.IsDir())
}
label ← "report", fileName ← "go09_file_info.txt", content ← "report:ready"
8func main() {9 var label→ "report" = "report" //@label="summary", "log"10 fileName→ "go09_file_info.txt" := "go09_file_info.txt"11 content→ "report:ready" := label"report" + ":ready"1213 err→ <nil> := os.WriteFile(fileName"go09_file_info.txt", []byte(content"report:ready"), 0644)14 if err != nil {15 fmt.Println("created=", false)16 return17 }18 defer os.Remove(fileName"go09_file_info.txt")1920 info→ &os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}, err→ <nil> := os.Stat(fileName"go09_file_info.txt")21 if err != nil {22 fmt.Println("found=", false)23 return24 }2526 fmt.Println("name=", info&os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}.Name())27 fmt.Println("size=", info&os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}.Size())28 fmt.Println("isDir=", info&os.fileStat{name:"go09_file_info.txt", size:12, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921827265, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:12, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Mtim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, Ctim:syscall.Timespec{Sec:1786230465, Nsec:602339985}, X__unused:[3]int64{0, 0, 0}}}.IsDir())29}outputname= go09_file_info.txt size= 12 isDir= false
label ← "summary", fileName ← "go09_file_info.txt", content ← "summary:ready"
8func main() {9 var label→ "summary" = "summary"10 fileName→ "go09_file_info.txt" := "go09_file_info.txt"11 content→ "summary:ready" := label"summary" + ":ready"1213 err→ <nil> := os.WriteFile(fileName"go09_file_info.txt", []byte(content"summary:ready"), 0644)14 if err != nil {15 fmt.Println("created=", false)16 return17 }18 defer os.Remove(fileName"go09_file_info.txt")1920 info→ &os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}, err→ <nil> := os.Stat(fileName"go09_file_info.txt")21 if err != nil {22 fmt.Println("found=", false)23 return24 }2526 fmt.Println("name=", info&os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}.Name())27 fmt.Println("size=", info&os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}.Size())28 fmt.Println("isDir=", info&os.fileStat{name:"go09_file_info.txt", size:13, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921580, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:13, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Mtim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, Ctim:syscall.Timespec{Sec:1786324780, Nsec:975045584}, X__unused:[3]int64{0, 0, 0}}}.IsDir())29}outputname= go09_file_info.txt size= 13 isDir= false
label ← "log", fileName ← "go09_file_info.txt", content ← "log:ready"
8func main() {9 var label→ "log" = "log"10 fileName→ "go09_file_info.txt" := "go09_file_info.txt"11 content→ "log:ready" := label"log" + ":ready"1213 err→ <nil> := os.WriteFile(fileName"go09_file_info.txt", []byte(content"log:ready"), 0644)14 if err != nil {15 fmt.Println("created=", false)16 return17 }18 defer os.Remove(fileName"go09_file_info.txt")1920 info→ &os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}, err→ <nil> := os.Stat(fileName"go09_file_info.txt")21 if err != nil {22 fmt.Println("found=", false)23 return24 }2526 fmt.Println("name=", info&os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}.Name())27 fmt.Println("size=", info&os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}.Size())28 fmt.Println("isDir=", info&os.fileStat{name:"go09_file_info.txt", size:9, mode:0x1a4, modTime:time.Time{wall:⟨addr A⟩, ext:63921921578, loc:(*time.Location)(⟨addr B⟩)}, sys:syscall.Stat_t{Dev:0x6d, Ino:⟨addr C⟩, Nlink:0x1, Mode:0x81a4, Uid:0x64, Gid:0x65, X__pad0:0, Rdev:0x0, Size:9, Blksize:4096, Blocks:8, Atim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Mtim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, Ctim:syscall.Timespec{Sec:1786324778, Nsec:308306377}, X__unused:[3]int64{0, 0, 0}}}.IsDir())29}outputname= go09_file_info.txt size= 9 isDir= false