Skip to content
Golang Developer tips

See More. Do More…

  • Home
  • Privacy beleid
  • Contact
  • Over ons

Post navigation

← Previous
Next →

Lees bestandsinformatie in Golang

januari 16, 2022
1 Comment
mel182
veiligheid
lees bestand metadata

In dit artikel gaan we bestanden of map gegevens uitlezen in Golang. Als het om beveiliging gaat, is het erg belangrijk om te bepalen wie de eigenaar is, wanneer was het laatst gewijzigd en of het bestand andere verborgen bestanden bevatten. Hackers zijn tegenwoordig bekend om kwaadaardige bestanden te achterlaten op je computer.

Om het bestand gegevens uit te kunnen lezen, moeten we de functie os.Stat() gebruiken die de bestand gegevens retourneren waarop de metadata kan worden opgehaald. Dergelijke informatie wordt geleverd via zo’n FileInfo struct.

bestandGegevens, err := os.Stat("./golang/file_info/nederlands/bestands_map/bestand.txt")
if err != nil {
   log.Fatal(err)
}

Nadat je de FileInfo struct heeft opgehaald, kun je alle aanvullende bestandseigenschappen ophalen. De functie Name() retourneert de bestandsnaam.

fmt.Println("Bestand naam:     ", bestandGegevens.Name())

De Size() functie retourneert de bestandsgrootte in bytes. Om onze broncodes leesbaarder te maken, hebben we een extra functie geimplementeerd om de bestandsgrootte in de vorm van een tekst (string) te retourneren. De functie berekent de bestandsgrootte m.b.v. van de FileInfo struct en retourneert het in bytes, kilobytes of megabytes.

func bestandsGrootteOphalen(bestandGegevens fs.FileInfo) string {

   bestandsGrootte := bestandGegevens.Size()
   if bestandsGrootte < 1000 { // Bestandsgrootte is in bytes
      return fmt.Sprintf("%d bytes", bestandsGrootte)
   } else { // bestandsgrootte is in kilobytes of megabytes
      bestandsGrootteInKb := float64(bestandsGrootte) / float64(1000)
      if bestandsGrootteInKb > 1000 { // bestandsgrootte is in megabytes
         bestandsGrootteInMb := bestandsGrootteInKb / float64(1000)
         return fmt.Sprintf("%d Mb", bestandsGrootteInMb)
      } else { // bestandsgrootte is in kilobytes
         return fmt.Sprintf("%d Kb", bestandsGrootteInKb)
      }
   }
}

Om de bestands rechten te bepalen, kan de Mode() functie gebruikt worden. De functie retourneert een FileMode struct die de modus en rechten bits bevatten. Niet alle bits zijn toepasbaar op alle besturingssystemen.

fmt.Println("Rechten:          ", bestandGegevens.Mode())

Voor de metadata van de laatste wijziging kan ModTime() gebruikt worden die een Time struct terug sturen.

fmt.Println("Laatst gewijzigd: ", bestandGegevens.ModTime())

Naast de bestandsGrootteOphalen is er nog een andere die bepaald of een bestand een map is of niet. Dit functie geef de tekst ja of nee terug.

func isEenMap(bestandGegevens fs.FileInfo) string {
   var resultaat = "Nee"
   if bestandGegevens.IsDir() {
      resultaat = "Ja"
   }
   return resultaat
}

Het resultaat van dit simpel Go applicatie leidt als volgt:

fmt.Println("|----------- Bestand gegevens -----------|")
fmt.Println("Bestand naam:     ", bestandGegevens.Name())
fmt.Println("Bestand grootte:  ", bestandsGrootteOphalen(bestandGegevens))
fmt.Println("Rechten:          ", bestandGegevens.Mode())
fmt.Println("Laatst gewijzigd: ", bestandGegevens.ModTime())
fmt.Println("Is een map:       ", isEenMap(bestandGegevens))
fmt.Println("|----------- Bestand gegevens -----------|\n")

Er is nog een voorbeeld toegevoegd, maar hier gaat het om een map:

mapGegevens, err := os.Stat("./golang/file_info/nederlands/bestands_map")
if err != nil {
   log.Fatal(err)
}
fmt.Println("|----------- Map gegevens -----------|")
fmt.Println("Bestand naam:        ", mapGegevens.Name())
fmt.Println("Bestand grootte:     ", bestandsGrootteOphalen(mapGegevens))
fmt.Println("Rechten:             ", mapGegevens.Mode())
fmt.Println("Laatst gewijzigd:    ", mapGegevens.ModTime())
fmt.Println("Is een map:          ", isEenMap(mapGegevens))
fmt.Println("|----------- Map gegevens -----------|")

Programma resultaat:

|----------- Bestand gegevens -----------|
Bestand naam:      bestand.txt
Bestand grootte:   23 bytes
Rechten:           -rw-r--r--
Laatst gewijzigd:  2022-01-11 19:36:13.962403306 -0400 AST
Is een map:        Nee
|----------- Bestand gegevens -----------|

|----------- Map gegevens -----------|
Bestand naam:         bestands_map
Bestand grootte:      96 bytes
Rechten:              drwxr-xr-x
Laatst gewijzigd:     2022-01-11 19:36:13.962481158 -0400 AST
Is een map:           Ja
|----------- Map gegevens -----------|

Zie onze GitHub repository voor de broncode van het project en kloon onze repository voor alle toekomstige projecten.

Volg ons:

One reply on “Lees bestandsinformatie in Golang”

  1. דירות דיסקרטיות בירושלים on mei 13, 2022
    Reply ↓

    Everything is very open with a precise clarification of the issues. It was truly informative. Your site is extremely helpful. Many thanks for sharing!

Geef een antwoord Reactie annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Recente berichten

  • Willekeurige ruis toevoegen aan een afbeelding in Go
  • Handige script bij gebruik van Go module in GoLand
  • Lees bestandsinformatie in Golang
  • Genereer van QR-code met gegevens in Golang
  • Druk uitvoer in console met Go

Recente reacties

  • דירות דיסקרטיות בירושלים op Lees bestandsinformatie in Golang

Archieven

  • mei 2022
  • april 2022
  • januari 2022
  • oktober 2021
  • september 2021
  • augustus 2021
  • mei 2020
  • april 2020
  • maart 2020
  • januari 2020

Categorieën

  • Go features
  • macOS
  • Ubuntu (linux)
  • Windows

Meta

  • Inloggen
  • Berichten feed
  • Reacties feed
  • WordPress.org
Golang Developer tips © 2023. All Rights Reserved.
Proudly powered by WordPress
A theme by Sampression