cpp

Работа с файловой системой

В предыдущей главе были описаны способы чтения и записи файлов. Теперь мы переходим к рассмотрению вопросов переименования и удаления файлов, получения информации о файлах, а также созданию, удалению и чтению каталогов.

Пакет path/filepath: преобразование пути

Для работы с путями в Go предназначен пакет path/filepath. Подключить пакет позволяет следующая инструкция:

import "path/filepath"

Пакет path/filepath содержит следующие константы:

  • ListSeparator — содержит символ-разделитель путей, используемый в текущей операционной системе:
fmt.Printf("%c\n", filepath.ListSeparator) // ;
fmt.Printf("%T\n", filepath.ListSeparator) // int32 (rune)

Можно также воспользоваться константой PathListSeparator из пакета os:

fmt.Printf("%c\n", os.PathListSeparator)   // ;
  • Separator — содержит символ-разделитель фрагментов в пути, используемый в текущей операционной системе:
fmt.Printf("%c\n", filepath.Separator) // \
fmt.Printf("%T\n", filepath.Separator) // int32 (rune)

Можно также воспользоваться константой PathSeparator из пакета os:

fmt.Printf("%c\n", os.PathSeparator)   // \

Функция IsPathSeparator() из пакета os возвращает значение true, если символ является символом-разделителем фрагментов в пути вне зависимости от текущей операционной системы, и false — в противном случае. Формат функции:

os.IsPathSeparator(c uint8) bool

Пример:

fmt.Println(os.IsPathSeparator('\\')) // true
fmt.Println(os.IsPathSeparator('/'))  // true
fmt.Println(os.IsPathSeparator(';'))  // false

Пакет path/filepath содержит следующие функции:

  • Abs() — преобразует относительный путь в абсолютный с учетом местоположения текущего рабочего каталога. Формат функции:
filepath.Abs(path string) (string, error)

Пример:

fmt.Println(filepath.Abs(`file.txt`))
// C:\book\test\file.txt <nil>
fmt.Println(filepath.Abs(`f1\file.txt`))
// C:\book\test\f1\file.txt <nil>
fmt.Println(filepath.Abs(`..\file.txt`))
// C:\book\file.txt <nil>
fmt.Println(filepath.Abs(`\book\test\file.txt`))
// C:\book\test\file.txt <nil>

При преобразовании выполняется нормализация пути с учетом текущей операционной системы:

fmt.Println(filepath.Abs(`/book\test/file.txt`))
// C:\book\test\file.txt <nil>
  • IsAbs() — возвращает true, если путь абсолютный, и false — в противном случае. Формат функции:
filepath.IsAbs(path string) (b bool)

Пример:

fmt.Println(filepath.IsAbs(`C:\book\test\file.txt`)) // true
fmt.Println(filepath.IsAbs(`/book/test/file.txt`))   // false
fmt.Println(filepath.IsAbs(`./file.txt`))            // false
  • Clean() — выполняет нормализацию пути. Формат функции:
filepath.Clean(path string) string

Пример:

fmt.Println(filepath.Clean(`C:\book/test\..\file.txt`))
// C:\book\file.txt
  • VolumeName() — возвращает название диска в Windows или имя тома. Формат функции:
filepath.VolumeName(path string) string

Пример:

fmt.Println(filepath.VolumeName(`C:\book\file.txt`)) // C:
  • Dir() — возвращает путь без последнего элемента. Формат функции:
filepath.Dir(path string) string

Пример:

fmt.Println(filepath.Dir(`C:\book\test\file.txt`))
// C:\book\test
fmt.Println(filepath.Dir(`C:\book\test\`)) // C:\book\test
fmt.Println(filepath.Dir(`C:\book\test`))  // C:\book
fmt.Println(filepath.Dir(`C:\`))           // C:\
fmt.Println(filepath.Dir(`.`))             // .
fmt.Println(filepath.Dir(`..`))            // .
fmt.Println(filepath.Dir(``))              // .
  • Base() — возвращает последний элемент пути. Формат функции:
filepath.Base(path string) string

Пример:

fmt.Println(filepath.Base(`C:\book\test\file.txt`)) // file.txt
fmt.Println(filepath.Base(`C:\book\test\`))         // test
fmt.Println(filepath.Base(`C:\book\test`))          // test
fmt.Println(filepath.Base(`C:\`))                   // \
fmt.Println(filepath.Base(`.`))                     // .
fmt.Println(filepath.Base(`..`))                    // ..
fmt.Println(filepath.Base(``))                      // .
  • Ext() — возвращает расширение файла с предваряющей точкой. Если расширения нет, то возвращается пустая строка. Формат функции:
filepath.Ext(path string) string

Пример:

fmt.Println(filepath.Ext(`C:\book\test\file.txt`))      // .txt
fmt.Println(filepath.Ext(`C:\book\test\file.test.txt`)) // .txt
fmt.Printf("%q\n", filepath.Ext(`C:\book\test`))        // ""
  • Split() — возвращает название каталога и название файла (или последний элемент пути). Формат функции:
filepath.Split(path string) (dir string, file string)

Пример:

fmt.Println(filepath.Split(`C:\book\test\file.txt`))
// C:\book\test\ file.txt
dir, file := filepath.Split(`file.txt`)
fmt.Printf("%q %q\n", dir, file)            // "" "file.txt"
dir, file = filepath.Split(`C:\book\test\`)
fmt.Printf("%q %q\n", dir, file) // "C:\\book\\test\\" ""
fmt.Println(filepath.Split(`C:\book\test`)) // C:\book\ test
dir, file = filepath.Split(`C:\`)
fmt.Printf("%q %q\n", dir, file)            // "C:\\" ""
  • Join() — объединяет указанные сегменты через разделитель, используемый в системе, и производит нормализацию пути. Формат функции:
filepath.Join(elem ...string) string

Пример:

fmt.Println(filepath.Join(`C:\`, `book\test`, `file.txt`))
// C:\book\test\file.txt
  • SplitList() — разделяет список путей по ListSeparator и возвращает слайс с путями. Формат функции:
filepath.SplitList(path string) []string

Получим все пути, входящие в переменную окружения PATH:

if path, ok := os.LookupEnv("PATH"); ok {
   arr := filepath.SplitList(path)
   for _, value := range arr {
      fmt.Println(value)
   }
}
  • EvalSymlinks() — позволяет получить путь на который указывает символическая ссылка. Формат функции:
filepath.EvalSymlinks(path string) (string, error)
  • FromSlash() — заменяет все символы / символом Separator. Формат функции:
filepath.FromSlash(path string) string

Пример:

fmt.Println(filepath.FromSlash(`C:/book/test/file.txt`))
// C:\book\test\file.txt
  • ToSlash() — заменяет все символы Separator символом /. Формат функции:
filepath.ToSlash(path string) string

Пример:

fmt.Println(filepath.ToSlash(`C:\book\test\file.txt`))
// C:/book/test/file.txt
  • Rel() — возвращает относительный путь от basepath к targpath. Формат функции:
filepath.Rel(basepath string, targpath string) (string, error)

Пример:

p1 := `C:\book\p1\test`
p2 := `C:\book\p2`
fmt.Println(filepath.Rel(p1, p2)) // ..\..\p2 <nil>
  • Match() — проверяет путь name на соответствие шаблону pattern. Формат функции:
filepath.Match(pattern string,
               name string) (matched bool, err error)

В строке шаблона можно использовать следующие специальные символы:

  • ? — любой одиночный символ;
  • * — любое количество символов;
  • [<Символы>] — позволяет указать символы, которые должны быть на этом месте в пути. Можно перечислить символы или указать диапазон через тире.

Пример:

fmt.Println(filepath.Match(`C:\book\*.txt`, `C:\book\file.txt`))
// true <nil>
fmt.Println(filepath.Match(`C:\book\*.txt`, `C:\book\file.js`))
// false <nil>

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp