Working with files and directories is a fundamental aspect of software development and system administration. Files represent persistent data stored on storage devices, while directories (or folders) provide a way to organize and structure files hierarchically within a file system.
In software development, interacting with files and directories allows applications to read input data, write output data, store configurations, and manage resources such as logs and temporary files. Common operations include reading from and writing to files, creating, deleting, moving, and renaming files and directories, and querying file metadata such as size, permissions, and timestamps.
File system operations are essential in system administration for managing server configurations, deploying applications, performing backups, and monitoring system health. Administrators use tools and commands to navigate file systems, set permissions, manage file attributes, and troubleshoot disk space issues.
package main import ( "log" "os" ) func main() { emptyFile, err := os.Create("empty.txt") if err != nil { log.Fatal(err) } log.Println(emptyFile) emptyFile.Close() }
Output :
PS C:\GO_Language\file> go run empty.go 2022/08/20 15:45:16 &{0xc00007e780}
package main import ( "log" "os" ) func main() { _, err := os.Stat("text") if os.IsNotExist(err) { errDir := os.MkdirAll("text", 0755) if errDir != nil { log.Fatal(err) } } }
Output :
PS C:\GO_Language\file> go run create.go
package main import ( "log" "os" ) func main() { oldName := "test.txt" newName := "testing.txt" err := os.Rename(oldName, newName) if err != nil { log.Fatal(err) } }
Output :
PS C:\GO_Language\file> go run rename.go
package main import ( "io" "log" "os" ) func main() { sourceFile, err := os.Open("C:/GO_Language/file/test.txt") if err != nil { log.Fatal(err) } defer sourceFile.Close() // Create new file newFile, err := os.Create("C:/GO_Language/test.txt ") if err != nil { log.Fatal(err) } defer newFile.Close() bytesCopied, err := io.Copy(newFile, sourceFile) if err != nil { log.Fatal(err) } log.Printf("Copied %d bytes.", bytesCopied) }
Output :
PS C:\GO_Language\file> go run f1.go 2022/08/20 15:39:48 Copied 59 bytes.
package main import ( "log" "os" ) func main() { oldLocation := "C:/GO_Language/test.txt" newLocation := "C:/GO_Language/file/test.txt" err := os.Rename(oldLocation, newLocation) if err != nil { log.Fatal(err) } }
Output :
PS C:\GO_Language\file> go run move.go
package main import ( "fmt" "log" "os" ) func main() { fileStat, err := os.Stat("test.txt") if err != nil { log.Fatal(err) } fmt.Println("File Name:", fileStat.Name()) fmt.Println("Size:", fileStat.Size()) fmt.Println("Permissions:", fileStat.Mode()) fmt.Println("Last Modified:", fileStat.ModTime()) fmt.Println("Is Directory: ", fileStat.IsDir()) }
Output :
PS C:\GO_Language\file> go run matadata.go File Name: test.txt Size: 59 Permissions: -rw-rw-rw- Last Modified: 2022-08-20 15:39:48.8907731 +0530 IST Is Directory: false
package main import ( "log" "os" ) func main() { err := os.Remove("C:/GO_Language/test.txt ") if err != nil { log.Fatal(err) } }
Output :
PS C:\GO_Language\file> go run delete.go
package main import ( "bufio" "fmt" "io/ioutil" "os" "strings" ) func main() { filename := "test.txt" filebuffer, err := ioutil.ReadFile(filename) if err != nil { fmt.Println(err) os.Exit(1) } inputdata := string(filebuffer) data := bufio.NewScanner(strings.NewReader(inputdata)) data.Split(bufio.ScanRunes) for data.Scan() { fmt.Print(data.Text()) } }
Output :
PS C:\GO_Language\file> go run readchar.go Sandeep Ramesh Shankar Mohan dhanaji Rajya Sohel
package main import ( "log" "os" ) func main() { err := os.Truncate("test.txt", 100) if err != nil { log.Fatal(err) } }
PS C:\GO_Language\file> go run truncate.go
package main import ( "fmt" "os" ) func main() { msg := "Add this content at end" fname := "test.txt" f, err := os.OpenFile(fname, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0660) if err != nil { fmt.Println(err) os.Exit(-1) } defer f.Close() fmt.Fprintf(f, "%s\n", msg) }
Output :
PS C:\GO_Language\file> go run append.go
package main import ( "log" "os" "time" ) func main() { _, err := os.Stat("test.txt") if err != nil { if os.IsNotExist(err) { log.Fatal("File does not exist.") } } log.Println("File exist.") // Change permissions Linux. err = os.Chmod("test.txt", 0777) if err != nil { log.Println(err) } // Change file ownership. err = os.Chown("test.txt", os.Getuid(), os.Getgid()) if err != nil { log.Println(err) } // Change file timestamps. addOneDayFromNow := time.Now().Add(24 * time.Hour) lastAccessTime := addOneDayFromNow lastModifyTime := addOneDayFromNow err = os.Chtimes("test.txt", lastAccessTime, lastModifyTime) if err != nil { log.Println(err) } }
Output :
PS C:\GO_Language\file> go run change.go 2022/08/20 16:55:42 File exist. 2022/08/20 16:55:42 chown test.txt: not supported by windows
package main import ( "archive/zip" "fmt" "io" "log" "os" ) func appendFiles(fname string, zipw *zip.Writer) error { file, err := os.Open(fname) if err != nil { return fmt.Errorf("Failed to open %s: %s", fname, err) } defer file.Close() wr, err := zipw.Create(fname) if err != nil { msg := "Failed to create entry for %s in zip file: %s" return fmt.Errorf(msg, fname, err) } if _, err := io.Copy(wr, file); err != nil { return fmt.Errorf("Failed to write %s to zip: %s", fname, err) } return nil } func main() { flags := os.O_WRONLY | os.O_CREATE | os.O_TRUNC file, err := os.OpenFile("test.zip", flags, 0644) if err != nil { log.Fatalf("Failed to open zip for writing: %s", err) } defer file.Close() var files = []string{"test1.txt", "test2.txt", "test3.txt"} zipw := zip.NewWriter(file) defer zipw.Close() for _, filename := range files { if err := appendFiles(filename, zipw); err != nil { log.Fatalf("Failed to add file %s to zip: %s", fname, err) } } }
Output :
PS C:\GO_Language\file> go run compress.go
package main import ( "archive/zip" "io" "log" "os" "path/filepath" ) func main() { zipReader, _ := zip.OpenReader("test.zip") for _, file := range zipReader.Reader.File { zippedFile, err := file.Open() if err != nil { log.Fatal(err) } defer zippedFile.Close() tDir := "./" extractedFilePath := filepath.Join( tDir, file.Name, ) if file.FileInfo().IsDir() { log.Println("Directory Created:", extractedFilePath) os.MkdirAll(extractedFilePath, file.Mode()) } else { log.Println("File extracted:", file.Name) opFile, err := os.OpenFile( extractedFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode(), ) if err != nil { log.Fatal(err) } defer opFile.Close() _, err = io.Copy(opFile, zippedFile) if err != nil { log.Fatal(err) } } } }
Output :
PS C:\GO_Language\file> go run extract.go 2022/08/20 17:11:43 File extracted: test1.txt 2022/08/20 17:11:43 File extracted: test2.txt 2022/08/20 17:11:43 File extracted: test3.txt