cpp

Функции для работы с каталогами

Для работы с каталогами используются следующие функции из пакета os:

  • Getwd() — позволяет получить строковое представление текущего рабочего каталога. Формат функции:
os.Getwd() (dir string, err error)

Пример:

fmt.Println(os.Getwd())          // C:\book\test <nil>
  • Chdir() — позволяет изменить текущий рабочий каталог. Формат функции:
os.Chdir(dir string) error

Пример:

fmt.Println(os.Getwd())          // C:\book\test <nil>
fmt.Println(os.Chdir(`C:\book`)) // <nil>
fmt.Println(os.Getwd())          // C:\book <nil>
  • TempDir() — возвращает путь к каталогу для временных файлов. Формат функции:
os.TempDir() string

Пример:

fmt.Println(os.TempDir()) // C:\Users\Unicross\AppData\Local\Temp
  • Mkdir() — создает каталог с именем name и правами доступа perm. Функция возвращает объект ошибки или значение nil, если операция выполнена успешно. Формат функции:
os.Mkdir(name string, perm fs.FileMode) error

Пример:

err := os.Mkdir(`C:\book\f1\`, 0o750)
if err != nil {
   if errors.Is(err, fs.ErrExist) {
      fmt.Println("Каталог уже существует")
   } else {
      fmt.Println(err)
   }
   return
}
fmt.Println("Операция выполнена успешно")
  • MkdirAll() — создает все каталоги в пути path с правами доступа perm. Функция возвращает объект ошибки или значение nil, если операция выполнена успешно. Формат функции:
os.MkdirAll(path string, perm fs.FileMode) error

Пример:

err := os.MkdirAll(`C:\book\f2\f3\`, 0o750)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println("Операция выполнена успешно")
  • MkdirTemp() — создает временный каталог с уникальным именем в каталоге dir. Название формируется путем добавления случайного значения к pattern. Функция возвращает два значения. Через первое значение доступен путь к созданному каталогу. Через второе значение доступен объект ошибки или значение nil, если операция выполнена успешно. Формат функции:
os.MkdirTemp(dir string, pattern string) (string, error)

Созданный временный каталог автоматически не удаляется. Его нужно удалять вручную с помощью функции RemoveAll(). Пример:

dir, err := os.MkdirTemp(`C:\book\`, `tmp_`)
if err != nil {
   fmt.Println(err)
   return
}
defer os.RemoveAll(dir)
fmt.Println("dir =", dir) // dir = C:\book\tmp_2531577710

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

dir, err := os.MkdirTemp(``, `*_tmp`)
if err != nil {
   fmt.Println(err)
   return
}
defer os.RemoveAll(dir)
fmt.Println("dir =", dir)
// dir = C:\Users\Unicross\AppData\Local\Temp\3693809501_tmp
  • Rename() — переименовывает и/или перемещает каталог. В первом параметре указывается старое название каталога, а во втором параметре — новое название. Если операция успешно произведена, то функция возвращает значение nil. В противном случае функция возвращает объект ошибки. Формат функции:
os.Rename(oldpath string, newpath string) error

Пример:

fmt.Println(os.Rename(`C:\book\f1\`, `C:\book\f3\`)) // <nil>
  • Remove() — удаляет каталог, название которого передано в параметре. Если операция успешно произведена, то функция возвращает значение nil. В противном случае функция возвращает объект ошибки. Обратите внимание: можно удалить только пустой каталог. Формат функции:
os.Remove(name string) error

Пример удаления пустого каталога:

fmt.Println(os.Remove(`C:\book\f3\`)) // <nil>
  • RemoveAll() — удаляет каталог и все дочерние элементы. Если операция успешно произведена или путь не существует, то функция возвращает значение nil. В противном случае функция возвращает объект ошибки. Формат функции:
os.RemoveAll(path string) error

Пример удаления каталога со всем содержимым:

fmt.Println(os.RemoveAll(`C:\book\f2\`)) // <nil>

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