Files and Directories
Directory Entries
os.ReadDir lists entries inside a directory.
directory entries
Directory entries describe files or folders by name and type without reading file contents.
Directory Entries
directory_entries.go
Replay: real traced execution (multi-file project)
package main
import (
"fmt"
"os"
"strings"
)
func main() {
var extraName = "notes.txt"
dirName := "go09_entries"
names := []string{"alpha.txt", extraName}
err := os.MkdirAll(dirName, 0755)
if err != nil {
fmt.Println("createdDir=", false)
return
}
defer os.RemoveAll(dirName)
for _, name := range names {
path := dirName + "/" + name
os.WriteFile(path, []byte(name), 0644)
}
entries, err := os.ReadDir(dirName)
if err != nil {
fmt.Println("listed=", false)
return
}
entryNames := make([]string, 0, len(entries))
for _, entry := range entries {
entryNames = append(entryNames, entry.Name())
}
joined := strings.Join(entryNames, "/")
fmt.Println("dir=", dirName)
fmt.Println("count=", len(entryNames))
fmt.Println("entries=", joined)
}
package main
import (
"fmt"
"os"
"strings"
)
func main() {
var extraName = "tasks.txt"
dirName := "go09_entries"
names := []string{"alpha.txt", extraName}
err := os.MkdirAll(dirName, 0755)
if err != nil {
fmt.Println("createdDir=", false)
return
}
defer os.RemoveAll(dirName)
for _, name := range names {
path := dirName + "/" + name
os.WriteFile(path, []byte(name), 0644)
}
entries, err := os.ReadDir(dirName)
if err != nil {
fmt.Println("listed=", false)
return
}
entryNames := make([]string, 0, len(entries))
for _, entry := range entries {
entryNames = append(entryNames, entry.Name())
}
joined := strings.Join(entryNames, "/")
fmt.Println("dir=", dirName)
fmt.Println("count=", len(entryNames))
fmt.Println("entries=", joined)
}
package main
import (
"fmt"
"os"
"strings"
)
func main() {
var extraName = "draft.txt"
dirName := "go09_entries"
names := []string{"alpha.txt", extraName}
err := os.MkdirAll(dirName, 0755)
if err != nil {
fmt.Println("createdDir=", false)
return
}
defer os.RemoveAll(dirName)
for _, name := range names {
path := dirName + "/" + name
os.WriteFile(path, []byte(name), 0644)
}
entries, err := os.ReadDir(dirName)
if err != nil {
fmt.Println("listed=", false)
return
}
entryNames := make([]string, 0, len(entries))
for _, entry := range entries {
entryNames = append(entryNames, entry.Name())
}
joined := strings.Join(entryNames, "/")
fmt.Println("dir=", dirName)
fmt.Println("count=", len(entryNames))
fmt.Println("entries=", joined)
}
extraName ← "notes.txt", dirName ← "go09_entries", names ← []string{"alpha.txt", "notes.txt"}
9func main() {10 var extraName→ "notes.txt" = "notes.txt" //@extraName="tasks.txt", "draft.txt"11 dirName→ "go09_entries" := "go09_entries"12 names→ []string{"alpha.txt", "notes.txt"} := []string{"alpha.txt", extraName"notes.txt"}1314 err→ <nil> := os.MkdirAll(dirName"go09_entries", 0755)15 if err != nil {16 fmt.Println("createdDir=", false)17 return18 }19 defer os.RemoveAll(dirName"go09_entries")for _, name := range names
pass 1 of 221for _, name"alpha.txt" := range names[]string{"alpha.txt", "notes.txt"} {22 path := dirName"go09_entries" + "/" + name"alpha.txt"23 os.WriteFile(path, []byte(name"alpha.txt"), 0644)24}for _, name := range names
pass 2 of 221for _, name"notes.txt" := range names[]string{"alpha.txt", "notes.txt"} {22 path := dirName"go09_entries" + "/" + name"notes.txt"23 os.WriteFile(path, []byte(name"notes.txt"), 0644)24}entries ← []fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}
26entries→ []fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}, err→ <nil> := os.ReadDir(dirName"go09_entries")27if err != nil {28 fmt.Println("listed=", false)29 return30}3132entryNames→ []string{} := make([]string, 0, len(entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}))33for _, entry := range entries {entryNames ← []string{"alpha.txt"}
pass 1 of 232entryNames := make([]string, 0, len(entries))33for _, entry&os.unixDirent{parent:"go09_entries", name:"alpha.txt", typ:0x0, info:fs.FileInfo(nil)} := range entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)} {34 entryNames→ []string{"alpha.txt"} = append(entryNames, entry&os.unixDirent{parent:"go09_entries", name:"alpha.txt", typ:0x0, info:fs.FileInfo(nil)}.Name())35}entryNames ← []string{"alpha.txt", "notes.txt"}
pass 2 of 232entryNames := make([]string, 0, len(entries))33for _, entry&os.unixDirent{parent:"go09_entries", name:"notes.txt", typ:0x0, info:fs.FileInfo(nil)} := range entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)} {34 entryNames→ []string{"alpha.txt", "notes.txt"} = append(entryNames, entry&os.unixDirent{parent:"go09_entries", name:"notes.txt", typ:0x0, info:fs.FileInfo(nil)}.Name())35}joined ← "alpha.txt/notes.txt"
35 }36 joined→ "alpha.txt/notes.txt" := strings.Join(entryNames[]string{"alpha.txt", "notes.txt"}, "/")3738 fmt.Println("dir=", dirName"go09_entries")39 fmt.Println("count=", len(entryNames[]string{"alpha.txt", "notes.txt"}))40 fmt.Println("entries=", joined"alpha.txt/notes.txt")41}outputdir= go09_entries count= 2 entries= alpha.txt/notes.txt
extraName ← "tasks.txt", dirName ← "go09_entries", names ← []string{"alpha.txt", "tasks.txt"}
9func main() {10 var extraName→ "tasks.txt" = "tasks.txt"11 dirName→ "go09_entries" := "go09_entries"12 names→ []string{"alpha.txt", "tasks.txt"} := []string{"alpha.txt", extraName"tasks.txt"}1314 err→ <nil> := os.MkdirAll(dirName"go09_entries", 0755)15 if err != nil {16 fmt.Println("createdDir=", false)17 return18 }19 defer os.RemoveAll(dirName"go09_entries")for _, name := range names
pass 1 of 221for _, name"alpha.txt" := range names[]string{"alpha.txt", "tasks.txt"} {22 path := dirName"go09_entries" + "/" + name"alpha.txt"23 os.WriteFile(path, []byte(name"alpha.txt"), 0644)24}for _, name := range names
pass 2 of 221for _, name"tasks.txt" := range names[]string{"alpha.txt", "tasks.txt"} {22 path := dirName"go09_entries" + "/" + name"tasks.txt"23 os.WriteFile(path, []byte(name"tasks.txt"), 0644)24}entries ← []fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}
26entries→ []fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}, err→ <nil> := os.ReadDir(dirName"go09_entries")27if err != nil {28 fmt.Println("listed=", false)29 return30}3132entryNames→ []string{} := make([]string, 0, len(entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}))33for _, entry := range entries {entryNames ← []string{"alpha.txt"}
pass 1 of 232entryNames := make([]string, 0, len(entries))33for _, entry&os.unixDirent{parent:"go09_entries", name:"alpha.txt", typ:0x0, info:fs.FileInfo(nil)} := range entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)} {34 entryNames→ []string{"alpha.txt"} = append(entryNames, entry&os.unixDirent{parent:"go09_entries", name:"alpha.txt", typ:0x0, info:fs.FileInfo(nil)}.Name())35}entryNames ← []string{"alpha.txt", "tasks.txt"}
pass 2 of 232entryNames := make([]string, 0, len(entries))33for _, entry&os.unixDirent{parent:"go09_entries", name:"tasks.txt", typ:0x0, info:fs.FileInfo(nil)} := range entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)} {34 entryNames→ []string{"alpha.txt", "tasks.txt"} = append(entryNames, entry&os.unixDirent{parent:"go09_entries", name:"tasks.txt", typ:0x0, info:fs.FileInfo(nil)}.Name())35}joined ← "alpha.txt/tasks.txt"
35 }36 joined→ "alpha.txt/tasks.txt" := strings.Join(entryNames[]string{"alpha.txt", "tasks.txt"}, "/")3738 fmt.Println("dir=", dirName"go09_entries")39 fmt.Println("count=", len(entryNames[]string{"alpha.txt", "tasks.txt"}))40 fmt.Println("entries=", joined"alpha.txt/tasks.txt")41}outputdir= go09_entries count= 2 entries= alpha.txt/tasks.txt
extraName ← "draft.txt", dirName ← "go09_entries", names ← []string{"alpha.txt", "draft.txt"}
9func main() {10 var extraName→ "draft.txt" = "draft.txt"11 dirName→ "go09_entries" := "go09_entries"12 names→ []string{"alpha.txt", "draft.txt"} := []string{"alpha.txt", extraName"draft.txt"}1314 err→ <nil> := os.MkdirAll(dirName"go09_entries", 0755)15 if err != nil {16 fmt.Println("createdDir=", false)17 return18 }19 defer os.RemoveAll(dirName"go09_entries")for _, name := range names
pass 1 of 221for _, name"alpha.txt" := range names[]string{"alpha.txt", "draft.txt"} {22 path := dirName"go09_entries" + "/" + name"alpha.txt"23 os.WriteFile(path, []byte(name"alpha.txt"), 0644)24}for _, name := range names
pass 2 of 221for _, name"draft.txt" := range names[]string{"alpha.txt", "draft.txt"} {22 path := dirName"go09_entries" + "/" + name"draft.txt"23 os.WriteFile(path, []byte(name"draft.txt"), 0644)24}entries ← []fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}
26entries→ []fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}, err→ <nil> := os.ReadDir(dirName"go09_entries")27if err != nil {28 fmt.Println("listed=", false)29 return30}3132entryNames→ []string{} := make([]string, 0, len(entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)}))33for _, entry := range entries {entryNames ← []string{"alpha.txt"}
pass 1 of 232entryNames := make([]string, 0, len(entries))33for _, entry&os.unixDirent{parent:"go09_entries", name:"alpha.txt", typ:0x0, info:fs.FileInfo(nil)} := range entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)} {34 entryNames→ []string{"alpha.txt"} = append(entryNames, entry&os.unixDirent{parent:"go09_entries", name:"alpha.txt", typ:0x0, info:fs.FileInfo(nil)}.Name())35}entryNames ← []string{"alpha.txt", "draft.txt"}
pass 2 of 232entryNames := make([]string, 0, len(entries))33for _, entry&os.unixDirent{parent:"go09_entries", name:"draft.txt", typ:0x0, info:fs.FileInfo(nil)} := range entries[]fs.DirEntry{(*os.unixDirent)(⟨addr A⟩), (*os.unixDirent)(⟨addr B⟩)} {34 entryNames→ []string{"alpha.txt", "draft.txt"} = append(entryNames, entry&os.unixDirent{parent:"go09_entries", name:"draft.txt", typ:0x0, info:fs.FileInfo(nil)}.Name())35}joined ← "alpha.txt/draft.txt"
35 }36 joined→ "alpha.txt/draft.txt" := strings.Join(entryNames[]string{"alpha.txt", "draft.txt"}, "/")3738 fmt.Println("dir=", dirName"go09_entries")39 fmt.Println("count=", len(entryNames[]string{"alpha.txt", "draft.txt"}))40 fmt.Println("entries=", joined"alpha.txt/draft.txt")41}outputdir= go09_entries count= 2 entries= alpha.txt/draft.txt