Go ile dosya işlemleri

Dosya işlemleri birçok program için gerekli aşamalardan biridir. Go ile bu işlemler çok basite indirilmiş durumda.

Basit İşlemler

  • Dosya oluşturma
  • Dosya silme
  • Dosya yeniden adlandırma
  • Dosya taşıma
  • Dosya bilgisi alma
  • Dosya içeriğini boşaltma
  • Dosya varmı yokmu kontrol etme
  • Dosya açma kapatma işlemi
  • Dosya izinlerini düzenleme
  • Dosya linkleme

Yazma ve Okuma

  • Hazırlık aşamasında

Sıkıştırma

  • Hazırlık aşamasında

Dosya oluşturma

package main

import (
	"log"
	"os"
)

var (
	fileName *os.File
	err      error
)

func main() {
	fileName, err = os.Create("test.txt")
	if err != nil {
		log.Fatal(err)
	}
	log.Println(fileName)
	fileName.Close()
}

Dosya silme

package main

import (
    "log"
    "os"
)

func main() {
    err := os.Remove("test.txt")
    if err != nil {
        log.Fatal(err)
    }
}

Dosya yeniden adlandırma

package main

import (
	"log"
	"os"
)

func main() {
	err := os.Rename("test.txt", "new-test.txt")
	if err != nil {
		log.Fatal(err)
	}
}

Dosya taşıma

package main

import (
	"log"
	"os"
)

func main() {

	err := os.Rename("test.txt", "yeni-dizin/test.txt")
	if err != nil {
		log.Fatal(err)
	}
}

Dosya bilgisi alma

package main

import (
	"fmt"
	"log"
	"os"
)

var (
	fileInfo os.FileInfo
	err      error
)

func main() {
	fileInfo, err = os.Stat("test.txt")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Dosya ismi:", fileInfo.Name())
	fmt.Println("Dosya boyutu:", fileInfo.Size())
	fmt.Println("Izinler:", fileInfo.Mode())
	fmt.Println("Son Degistirilme:", fileInfo.ModTime())
	fmt.Println("Dizin mi?: ", fileInfo.IsDir())
	fmt.Printf("Sistem interface tipi: %T\n", fileInfo.Sys())
	fmt.Printf("Sistem bilgisi: %+v\n\n", fileInfo.Sys())
}

Dosya içeriğini boşaltma

package main

import (
    "log"
    "os"
)

func main() {
    err := os.Truncate("test.txt", 0)
    if err != nil {
        log.Fatal(err)
    }
}

Dosya varmı yokmu kontrol etme

package main

import (
	"log"
	"os"
)

var (
	err error
)

func main() {
	_, err := os.Stat("test.txt")
	if err != nil {
		if os.IsNotExist(err) {
			log.Fatal("Dosya yok.")
		}
	}
	log.Println("Dosya var")
}

Dosya açma kapatma işlemi

package main

import (
    "log"
    "os"
)

func main() {
    // Basitce okuma islemi icin
    file, err := os.Open("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    file.Close()

    // Dosya acma modu ve izini belirtme, Istersek birden fazla
    // mod belirtebiliriz 'O_CREATE|os.O_APPEND' gibi.
    file, err = os.OpenFile("test.txt", os.O_APPEND, 0666)
    if err != nil {
        log.Fatal(err)
    }
    file.Close()

    // os.O_RDONLY // Okuma
    // os.O_WRONLY // Yazma
    // os.O_RDWR // Okuma ve Yazma
    // os.O_APPEND // Ekleme yapma
    // os.O_CREATE // Eger yoksa yeni bir dosya olusturma
    // os.O_TRUNC // Acarken dosya icini bosaltma
}

Dosya izinlerini düzenleme

package main

import (
    "log"
    "os"
    "time"
)

func main() {
    // Dosya iznini degistirme
    err := os.Chmod("test.txt", 0777)
    if err != nil {
        log.Println(err)
    }

    // Dosya sahibini degistirme
    err = os.Chown("test.txt", os.Getuid(), os.Getgid())
    if err != nil {
        log.Println(err)
    }

    // Dosya tarihlerini degistirme
    twoDaysFromNow := time.Now().Add(48 * time.Hour)
    lastAccessTime := twoDaysFromNow
    lastModifyTime := twoDaysFromNow
    err = os.Chtimes("test.txt", lastAccessTime, lastModifyTime)
    if err != nil {
        log.Println(err)
    }
}

Dosya linkleme


package main

import (
    "os"
    "log"
    "fmt"
)

func main() {

    // Hard link olusturma,
    // Birinin icerigini degistirmeniz digerinin iceriginide 
    // degistirir.
    // Birini silme veya yeniden adlandirma digerinin durumunu degistirmez.
    err := os.Link("test.txt", "test_kopya.txt")
    if err != nil {
        log.Fatal(err)
    }

 
    // Sembolik link olusturma
    err = os.Symlink("test.txt", "test_sembolik.txt")
    if err != nil {
        log.Fatal(err)
    }


    // Lstat dosya bilgisini doner, ancak sembolik linkse
    // sembolik link ile ilgili bilgi donecektir.
    fileInfo, err := os.Lstat("test_sembolik.txt")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Link bilgisi: %+v", fileInfo)

    // Ana dosyayi degistirmeden sembolik link sahip bilgisini 
    // degistirme
    err = os.Lchown("test_sembolik.txt", os.Getuid(), os.Getgid())
    if err != nil {
        log.Fatal(err)
    }
}