Funções <filesystem>
Essas funções livres no cabeçalho <filesystem>
realizam operações de modificação e consulta em caminhos, arquivos, symlinks, diretórios e volumes. Para obter mais informações e exemplos de código, consulte Navegação do Sistema de Arquivos (C++).
absolute
path absolute(const path& pval, const path& base = current_path());
A função retorna o nome de caminho absoluto correspondente a pval
, com relação ao nome de caminho base
:
Se
pval.has_root_name() && pval.has_root_directory()
, a função retornarápval
.Se
pval.has_root_name() && !pval.has_root_directory()
, a função retornarápval.root_name()
/absolute(base).root_directory()
/absolute(base).relative_path()
/pval.relative_path()
.Se
!pval.has_root_name() && pval.has_root_directory()
, a função retornaráabsolute(base).root_name()
/pval
.Se
!pval.has_root_name() && !pval.has_root_directory()
, a função retornaráabsolute(base)
/pval
.
begin
const directory_iterator& begin(const directory_iterator& iter) noexcept;
const recursive_directory_iterator&
begin(const recursive_directory_iterator& iter) noexcept;
Ambas as funções retornam iter
.
canonical
path canonical(const path& pval, const path& base = current_path());
path canonical(const path& pval, error_code& ec);
path canonical(const path& pval, const path& base, error_code& ec);
Todas as funções formam um nome de caminho absoluto pabs = absolute(pval, base)
(ou pabs = absolute(pval)
para a sobrecarga sem parâmetro base) e o reduzem a uma forma canônica na seguinte sequência de etapas:
Cada componente do caminho
X
para o qualis_symlink(X)
étrue
é substituído porread_symlink(X)
.Cada componente do caminho
.
(o ponto é o diretório atual estabelecido pelos componentes de caminho anteriores) é removido.Cada par de componentes do caminho
X
/..
(os dois-pontos são o diretório pai estabelecido por componentes de caminho anteriores) é removido.
A função retorna pabs
.
copy
void copy(const path& from, const path& to);
void copy(const path& from, const path& to, error_code& ec) noexcept;
void copy(const path& from, const path& to, copy_options opts);
void copy(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;
Todas as funções, possivelmente, copiam ou vinculam um ou mais arquivos em de a a sob controle de opts
, que é interpretada como copy_options::none
para as sobrecargas sem o parâmetro opts
. opts
deve conter no máximo um item entre:
skip_existing
,overwrite_existing
ouupdate_existing
copy_symlinks
ouskip_symlinks
directories_only
,create_symlinks
oucreate_hard_links
As funções primeiro determinam o valores de file_status f f
para de a t
para a:
se
opts & (copy_options::create_symlinks | copy_options::skip_symlinks)
, ao chamarsymlink_status
caso contrário, ao chamar
status
Caso contrário, geram um erro.
Se !exists(f) || equivalent(f, t) || is_other(f) || is_other(t) || is_directory(f)&& is_regular_file(t)
, eles relatarão um erro (e não farão mais nada).
Caso contrário, se is_symlink(f)
, então:
Se
options & copy_options::skip_symlinks
, não faça nada.Caso contrário, se
!exists(t)&& options & copy_options::copy_symlinks
. entãocopy_symlink(from, to, opts)
.Caso contrário, geram um erro.
Caso contrário, se is_regular_file(f)
, então:
Se
opts & copy_options::directories_only
, não faça nada.Caso contrário, se
opts & copy_options::create_symlinks
. entãocreate_symlink(to, from)
.Caso contrário, se
opts & copy_options::create_hard_links
. entãocreate_hard_link(to, from)
.Caso contrário, se
is_directory(f)
. entãocopy_file(from, to
/from.filename(), opts)
.Caso contrário,
copy_file(from, to, opts)
.
Caso contrário, se is_directory(f) && (opts & copy_options::recursive || !opts)
, então:
if (!exists(t))
{ // copy directory contents recursively
create_directory(to, from, ec);
for (directory_iterator next(from), end; ec == error_code() && next != end; ++next)
{
copy(next->path(), to / next->path().filename(), opts, ec);
}
}
Caso contrário, não faça nada.
copy_file
bool copy_file(const path& from, const path& to);
bool copy_file(const path& from, const path& to, error_code& ec) noexcept;
bool copy_file(const path& from, const path& to, copy_options opts);
bool copy_file(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;
Todas as funções, possivelmente, copiam o arquivo em de para para sob controle de opts
, que é interpretado como copy_options::none
para as sobrecargas sem o parâmetro opts
. opts
deve conter, no máximo, um item de skip_existing
, overwrite_existing
ou update_existing
.
Se exists(to) && !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options::update_existing))
, então será relatado como um erro que o arquivo já existe.
Caso contrário, se!exists(to) || opts & copy_options::overwrite_existing || opts & copy_options::update_existing&& last_write_time(to) < last_write_time(from) || !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options:update_existing))
, tente copiar o conteúdo e os atributos do arquivo depara o arquivopara. Relatar um erro se a tentativa de cópia falhar.
As funções retornam true
se a tentativa de cópia for bem-sucedida, caso contráriofalse
.
copy_symlink
void copy_symlink(const path& from, const path& to);
void copy_symlink(const path& from, const path& to, error_code& ec) noexcept;
Se is_directory(from)
, a função chama create_directory_symlink(from, to)
. Caso contrário, ela chamará create_symlink(from, to)
.
create_directories
bool create_directories(const path& pval);
bool create_directories(const path& pval, error_code& ec) noexcept;
Para um nome de caminho, como a\/b\/c
, a função cria diretórios a
e a\/b
conforme necessário para que possa criar o diretório a\/b\/c
conforme necessário. Retorna true
somente se realmente criar o diretório pval
.
create_directory
bool create_directory(const path& pval);
bool create_directory(const path& pval, error_code& ec) noexcept;
bool create_directory(const path& pval, const path& attr);
bool create_directory(const path& pval, const path& attr, error_code& ec) noexcept;
A função cria o diretório pval
conforme necessário. Retorna true
somente se realmente criar o diretório pval
e, nesse caso, copia as permissões do arquivo existente attr
ou usa perms::all
para os overloads sem o parâmetro attr
.
create_directory_symlink
void create_directory_symlink(const path& to, const path& link);
void create_directory_symlink(const path& to, const path& link, error_code& ec) noexcept;
A função cria o link como um symlink para o diretório a.
create_hard_link
void create_hard_link(const path& to, const path& link);
void create_hard_link(const path& to, const path& link, error_code& ec) noexcept;
A função cria o link como um link físico para o diretório ou arquivo a.
create_symlink
void create_symlink(const path& to, const path& link);
void create_symlink(const path& to, const path& link, error_code& ec) noexcept;
A função cria link
como um symlink para o arquivo para.
current_path
path current_path();
path current_path(error_code& ec);
void current_path(const path& pval);
void current_path(const path& pval, error_code& ec) noexcept;
As funções sem parâmetro pval
retornam o nome do caminho para o diretório atual. As funções restantes definem o diretório atual como pval
.
end
directory_iterator& end(const directory_iterator& iter) noexcept;
recursive_directory_iterator& end(const recursive_directory_iterator& iter) noexcept;
A primeira função retorna directory_iterator()
e a segunda retorna recursive_directory_iterator()
equivalent
bool equivalent(const path& left, const path& right);
bool equivalent(const path& left, const path& right, error_code& ec) noexcept;
As funções retornam true
somente se esquerda e direita escolherem a mesma entidade de filesystem.
exists
bool exists(file_status stat) noexcept;
bool exists(const path& pval);
bool exists(const path& pval, error_code& ec) noexcept;
A primeira função retorna status_known && stat.type() != file_not_found
. A segunda e a terceira função retornam exists(status(pval))
.
file_size
uintmax_t file_size(const path& pval);
uintmax_t file_size(const path& pval, error_code& ec) noexcept;
As funções retornam o tamanho em bytes do arquivo escolhido por pval
, se exists(pval) && is_regular_file(pval)
e o tamanho do arquivo puder ser determinado. Caso contrário, elas geram um erro e retornam uintmax_t(-1)
.
hard_link_count
uintmax_t hard_link_count(const path& pval);
uintmax_t hard_link_count(const path& pval, error_code& ec) noexcept;
A função retorna o número de links físicos para pval
ou -1 se ocorrer um erro.
hash_value
size_t hash_value(const path& pval) noexcept;
A função retorna um valor de hash para pval.native()
.
is_block_file
bool is_block_file(file_status stat) noexcept;
bool is_block_file(const path& pval);
bool is_block_file(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::block
. As funções restantes retornam is_block_file(status(pval))
.
is_character_file
bool is_character_file(file_status stat) noexcept;
bool is_character_file(const path& pval);
bool is_character_file(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::character
. As funções restantes retornam is_character_file(status(pval))
.
is_directory
bool is_directory(file_status stat) noexcept;
bool is_directory(const path& pval);
bool is_directory(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::directory
. As funções restantes retornam is_directory_file(status(pval))
.
is_empty
bool is_empty(file_status stat) noexcept;
bool is_empty(const path& pval);
bool is_empty(const path& pval, error_code& ec) noexcept;
Se is_directory(pval)
, então a função retornará directory_iterator(pval) == directory_iterator()
; caso contrário, retornará file_size(pval) == 0
.
is_fifo
bool is_fifo(file_status stat) noexcept;
bool is_fifo(const path& pval);
bool is_fifo(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::fifo
. As funções restantes retornam is_fifo(status(pval))
.
is_other
bool is_other(file_status stat) noexcept;
bool is_other(const path& pval);
bool is_other(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::other
. As funções restantes retornam is_other(status(pval))
.
is_regular_file
bool is_regular_file(file_status stat) noexcept;
bool is_regular_file(const path& pval);
bool is_regular_file(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::regular
. As funções restantes retornam is_regular_file(status(pval))
.
is_socket
bool is_socket(file_status stat) noexcept;
bool is_socket(const path& pval);
bool is_socket(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::socket
. As funções restantes retornam is_socket(status(pval))
.
is_symlink
bool is_symlink(file_status stat) noexcept;
bool is_symlink(const path& pval);
bool is_symlink(const path& pval, error_code& ec) noexcept;
A primeira função retorna stat.type() == file_type::symlink
. As funções restantes retornam is_symlink(status(pval))
.
last_write_time
file_time_type last_write_time(const path& pval);
file_time_type last_write_time(const path& pval, error_code& ec) noexcept;
void last_write_time(const path& pval, file_time_type new_time);
void last_write_time(const path& pval, file_time_type new_time, error_code& ec) noexcept;
As duas primeiras funções retornam a hora da última modificação de dados para pval
ou file_time_type(-1)
se ocorrer um erro. As duas últimas funções definem a hora da última modificação de dados para pval
a new_time
.
permissions
void permissions(const path& pval, perms mask);
void permissions(const path& pval, perms mask, error_code& ec) noexcept;
As funções definem as permissões para o pathname escolhido pelo pval
a mask & perms::mask
sob controle de perms & (perms::add_perms | perms::remove_perms)
. mask
deve conter, no máximo, um de perms::add_perms
e perms::remove_perms
.
Se mask & perms::add_perms
, as funções definem as permissões para status(pval).permissions() | mask & perms::mask
. Caso contrário, se mask & perms::remove_perms
, as funções definem as permissões para status(pval).permissions() & ~(mask & perms::mask)
. Caso contrário, as funções definem as permissões para mask & perms::mask
.
proximate
path proximate(const path& p, error_code& ec);
path proximate(const path& p, const path& base = current_path());
path proximate(const path& p, const path& base, error_code& ec);
read_symlink
path read_symlink(const path& pval);
path read_symlink(const path& pval, error_code& ec);
As funções relatam um erro e retornam path()
se !is_symlink(pval)
. Caso contrário, as funções retornam um objeto do tipo path
contendo o link simbólico.
relative
path relative(const path& p, error_code& ec);
path relative(const path& p, const path& base = current_path());
path relative(const path& p, const path& base, error_code& ec);
remove
bool remove(const path& pval);
bool remove(const path& pval, error_code& ec) noexcept;
As funções retornam true
somente se exists(symlink_status(pval))
e o arquivo for removido com sucesso. O próprio symlink é removido e não o arquivo que ele escolhe.
remove_all
uintmax_t remove_all(const path& pval);
uintmax_t remove_all(const path& pval, error_code& ec) noexcept;
Se pval
for um diretório, as funções removem recursivamente todas as entradas do diretório e a entrada em si. Caso contrário, as funções chamam remove
. Elas retornam uma contagem de todos os elementos removidos com êxito.
rename
void rename(const path& from, const path& to);
void rename(const path& from, const path& to, error_code& ec) noexcept;
As funções renomeam de a a. O próprio symlink é renomeado e não o arquivo que ele escolha.
resize_file
void resize(const path& pval, uintmax_t size);
void resize(const path& pval, uintmax_t size, error_code& ec) noexcept;
As funções alteram o tamanho de um arquivo, de modo que file_size(pval) == size
space
space_info space(const path& pval);
space_info space(const path& pval, error_code& ec) noexcept;
A função retorna informações sobre o volume escolhido por pval
, em uma estrutura do tipo space_info
. A estrutura contém uintmax_t(-1)
para qualquer valor que não possa ser determinado.
status
file_status status(const path& pval);
file_status status(const path& pval, error_code& ec) noexcept;
As funções retornam o status do nome de caminho, o tipo de arquivo e as permissões, associados a pval
. O próprio symlink não é testado e sim o arquivo que ele escolhe.
status_known
bool status_known(file_status stat) noexcept;
A função retorna stat.type() != file_type::none
swap
void swap(path& left, path& right) noexcept;
A função troca o conteúdo de esquerda e direita.
symlink_status
file_status symlink_status(const path& pval);
file_status symlink_status(const path& pval, error_code& ec) noexcept;
As funções retornam o status do symlink do nome de caminho, o tipo de arquivo e as permissões, associados a pval
. As funções se comportam da mesma forma que status(pval)
, exceto pelo fato de que um symlink é testado e não o arquivo que ele escolhe.
system_complete
path system_complete(const path& pval);
path system_complete(const path& pval, error_code& ec);
As funções retornam um nome de caminho absoluto que leva em conta, conforme necessário, o diretório atual associado ao seu nome de raiz. (Para POSIX, as funções retornam absolute(pval)
).
temp_directory_path
path temp_directory_path();
path temp_directory_path(error_code& ec);
As funções retornam um nome de caminho para um diretório adequado para armazenar arquivos temporários.
u8path
template <class Source>
path u8path(const Source& source);
template <class InIt>
path u8path(InIt first, InIt last);
A primeira função se comporta da mesma forma que path(source)
e a segunda função se comporta da mesma forma que path(first, last)
, exceto pelo fato de que a origem escolhida em cada caso é usada como uma sequência de elementos char codificados como UTF-8, independentemente do sistema de arquivos.
weakly_canonical
path weakly_canonical(const path& p);
path weakly_canonical(const path& p, error_code& ec);