Mai mult
Cum pentru a verifica dacă un fișier există în Drumul?
Du-te's biblioteca standard nu are o funcție exclusiv în scopul de a verifica dacă un fișier există sau nu (cum ar fi Python's os.calea.există
). Ce este idiomatice cum să o faci?
390
8
Pentru a verifica dacă un fișier nu't există, echivalent cu Python's
dacă nu sistemul de operare.calea.există(filename)
:Pentru a verifica dacă un fișier există, echivalent cu Python's
dacă sistemul de operare.calea.există(filename)
:Editat: pe comentarii recente
Raspuns de Caleb Rezervă postat în gonuts lista de corespondență.
Preluat de pe: https://groups.google.com/forum/#!msg/golang-nuci/Ayx-BMNdMFo/4rL8FFHr8v4J
Ar trebui să utilizați
os.Stat () " și " sistem de operare.IsNotExist()
funcții ca în următorul exemplu:De exemplu este extras din aici.
De exemplu, prin user11617 este incorectă; se va raporta că fișierul există chiar și în cazurile în care nu, dar a existat o eroare de un alt fel.
Semnătura trebuie să fie Există(string) (bool, eroare). Și apoi, așa cum se întâmplă, apelul site-uri sunt mai bune.
Codul scris de el ar mai fi:
Dar eu sugerez acest loc:
Funcția exemplu:
Las's se uite la câteva aspecte în primul rând, atât funcția oferite de
os
pachet degolang
nu sunt utilități, dar de eroare joc de dame, ce vreau să spun cu asta este că sunt doar un wrapper să se ocupe de erori pe cross-platform.Deci, practic, dacă
os.Stat
, dacă această funcție nu't da nici o eroare asta înseamnă că fișierul este deja existente, dacă nu aveți nevoie pentru a verifica ce fel de eroare este, aici vine folosi de aceste două funcțiios.IsNotExist
șisistem de operare.IsExist
.Acest lucru poate fi înțeles ca
Stat
de fișierul aruncat de eroare pentru că nu't există sau este aruncat de eroare pentru că a existat și există unele probleme cu ea.Parametrul care aceste funcții să ia este de tip
eroare
, deși s-ar putea fi capabil să treacăzero
, dar nu't sens.Acest lucru, de asemenea, subliniază faptul că
IsExist nu este de același fel !IsNotExist
, sunt două lucruri diferite.Deci, acum, dacă vrei să știi dacă un anumit fișier există, dar aș prefera cel mai bun mod este:
Ce alte răspunsuri ratat, asta e calea pentru funcția ar putea fi de fapt un director. Următoarea funcție face sigur, că drumul este într-adevăr un fișier.
`` func fileExists(filename string) bool { informatii, err := os.Stat(filename) dacă sistemul de operare.IsNotExist(err) { return false } reveni !info.IsDir() }
``
Un alt lucru pe care să-l subliniez: Acest cod ar putea conduce la o condiție de rulare, în cazul în care un alt fir sau proces șterge sau creează fișierul specificat, în timp ce fileExists funcția se execută.
Daca're îngrijorat de acest lucru, utilizați un sistem de blocare în fire, căreia îi dau acces la această funcție sau de a folosi un inter-proces semafor dacă mai multe aplicații sunt implicate. Dacă alte aplicații sunt implicate, în afara controlului tău, te're de noroc, cred.