Как получить количество файлов в каталоге в beego [duplicate]

Большинство шлюзов (маршрутизатор) имеют параметр VirtualServer, который вы можете указать на локальный сервер (192.168.0.50)

. Вы можете использовать что-то вроде dyndns.org для установки постоянного имени хоста на ваш сервер. то есть mylocalserver.dyndns.org

94
задан Behram Mistree 3 August 2016 в 13:46
поделиться

4 ответа

Вы можете попробовать использовать функцию ReadDir в пакете io/ioutil. В документах:

ReadDir считывает каталог с именем dirname и возвращает список отсортированных записей в каталоге.

Получаемый фрагмент содержит os.FileInfo типы, которые предоставляют методы, перечисленные здесь здесь . Вот базовый пример, в котором перечислены все имена в текущем каталоге (папки включены, но не специально отмечены - вы можете проверить, является ли элемент папкой с помощью метода IsDir()):

package main

import (
    "fmt"
    "io/ioutil"
     "log"
)

func main() {
    files, err := ioutil.ReadDir("./")
    if err != nil {
        log.Fatal(err)
    }

    for _, f := range files {
            fmt.Println(f.Name())
    }
}
205
ответ дан Martin Tournoij 17 August 2018 в 12:25
поделиться
  • 1
    Огромное спасибо. Я искал что-то вроде этого для 1 часа. – Behram Mistree 3 February 2013 в 04:35
  • 2
    @BehramMistree Нет проблем вообще - понял, что я не отказался от ссылки на фактический пакет ioutil, поэтому я добавлю его ради потомства. Удачи во всем :) – RocketDonkey 3 February 2013 в 04:37
  • 3
    Но, пожалуйста, не игнорируйте ошибку, возвращаемую ReadDir ... – Deleplace 15 December 2016 в 11:51

Еще проще, используйте path/filepath:

package main    

import (
    "fmt"
    "log"
    "path/filepath"
)

func main() {
    files, err := filepath.Glob("*")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(files) // contains a list of all files in the current directory
}
49
ответ дан Fatih Arslan 17 August 2018 в 12:25
поделиться
  • 1
    Отлично работает: func main () {if l, err: = filepath.Glob (& quot; / tmp / lang / locale _ *. Json & quot;); err! = nil {fmt.Println (err)} else {fmt.Println (l)}} – RoboTamer 8 October 2013 в 01:14
  • 2
    Обратите внимание, что Glob ignores file system errors such as I/O errors reading directories. The only possible returned error is ErrBadPattern, when pattern is malformed. – Jon 7 November 2015 в 16:16
  • 3
    Не забудьте понять, что делает Glob, прежде чем использовать его. golang.org/pkg/path/filepath/#Glob – Anfernee 29 April 2016 в 14:49

Мы можем получить список файлов внутри папки в файловой системе, используя различные стандартные библиотечные функции golang.

  1. filepath.Walk
  2. ioutil.ReadDir
  3. os.File.Readdir

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
)

func main() {
    var (
        root  string
        files []string
        err   error
    )

    root := "/home/manigandan/golang/samples"
    // filepath.Walk
    files, err = FilePathWalkDir(root)
    if err != nil {
        panic(err)
    }
    // ioutil.ReadDir
    files, err = IOReadDir(root)
    if err != nil {
        panic(err)
    }
    //os.File.Readdir
    files, err = OSReadDir(root)
    if err != nil {
        panic(err)
    }

    for _, file := range files {
        fmt.Println(file)
    }
}
  1. Использование filepath.Walk

Пакет path/filepath предоставляет удобный способ сканирования всех файлов в каталоге, он автоматически сканирует каждый подкаталог в каталоге.

func FilePathWalkDir(root string) ([]string, error) {
    var files []string
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if !info.IsDir() {
            files = append(files, path)
        }
        return nil
    })
    return files, err
}
  1. Использование ioutil.ReadDir

ioutil.ReadDir читает каталог с именем dirname и возвращает список записей в каталоге, отсортированных по имени файла.

func IOReadDir(root string) ([]string, error) {
    var files []string
    fileInfo, err := ioutil.ReadDir(root)
    if err != nil {
        return files, err
    }

    for _, file := range fileInfo {
        files = append(files, file.Name())
    }
    return files, nil
}
  1. Использование os.File .Readdir

Readdir считывает содержимое каталога, связанного с файлом, и возвращает срез до n значений FileInfo, как было бы возвращено Lstat, в порядке каталога. Последующие вызовы в том же файле приведут к дальнейшему FileInfos.

func OSReadDir(root string) ([]string, error) {
    var files []string
    f, err := os.Open(root)
    if err != nil {
        return files, err
    }
    fileInfo, err := f.Readdir(-1)
    f.Close()
    if err != nil {
        return files, err
    }

    for _, file := range fileInfo {
        files = append(files, file.Name())
    }
    return files, nil
}

Результаты теста.

Получить подробнее об этом сообщении в блоге

13
ответ дан manigandand 17 August 2018 в 12:25
поделиться

ioutil.ReadDir - хорошая находка, но если вы щелкнете и посмотрите на источник, вы увидите, что он вызывает метод Readdir of os.File . Если вы в порядке с порядком каталога и не нуждаетесь в сортировке списка, тогда этот метод Readdir - это все, что вам нужно.

19
ответ дан Sonia 17 August 2018 в 12:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: