filesystem
Yollar, dosyalar ve dizinler hakkındaki bilgileri işleyen ve alan sınıflara ve işlevlere erişim için üst bilgiyi <filesystem>
ekleyin.
Sözdizimi
#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;
Önemli
Visual Studio 2017 <filesystem>
sürümünde üst bilgi henüz bir C++ standardı değildi. Visual Studio 2017 RTW'deki C++, ISO/IEC JTC 1/SC 22/WG 21 N4100'de bulunan son taslak standardını uygular. Visual Studio 2017 sürüm 15.7 ve üzeri yeni C++17 <filesystem>
standardını destekler.
Bu, önceki std::experimental
sürümle uyumlu olmayan tamamen yeni bir uygulamadır. Symlink desteği, hata düzeltmeleri ve standart olarak gerekli davranış değişiklikleriyle gerekli hale getirildi. Visual Studio 2019 sürüm 16.3 ve sonraki sürümlerinde, <filesystem>
yalnızca yeni std::filesystem
sağlar. Dahil, <experimental/filesystem>
yalnızca eski experimental uygulamayı sağlar. Uygulama, experimental kitaplıkların bir sonraki ABI hataya neden olan sürümünde kaldırılacaktır.
Bu üst bilgi, iki geniş konak işletim sistemi sınıfından biri için dosya sistemlerini destekler: Microsoft Windows ve POSIX.
İşlevlerin çoğu her iki işletim sistemi için de ortak olsa da, bu belgede farkların nerede oluştuğu belirlenir. Örneğin:
Windows, veya
\\network_name
gibic:
birden çok kök adı destekler. Dosya sistemi, göreli yol adını (mutlak yol adı olmayan) tamamlamak için her biri veya\\network_name\
gibic:\
kendi kök dizinine sahip ve her biri kendi geçerli dizinine sahip ağaçlardan oluşan bir ormandan oluşur.POSIX, kök adı olmayan tek bir ağacı, tek bir kök dizini
/
ve tek bir geçerli dizini destekler.
Bir diğer önemli fark da yol adlarının yerel gösterimidir:
Windows, UTF-16 (her karakter için bir veya daha fazla öğe) olarak kodlanmış null olarak sonlandırılan dizisi
wchar_t
kullanır.POSIX, UTF-8 (her karakter için bir veya daha fazla öğe) olarak kodlanmış null olarak sonlandırılan dizisi
char
kullanır.sınıfının
path
bir nesnesi pathname dosyasını yerel biçimde depolar, ancak bu depolanmış form ile birkaç dış form arasında kolay dönüştürmeyi destekler:İşletim sistemi tarafından tercih edilen şekilde kodlanmış, null olarak sonlandırılan dizisi
char
.UTF-8 olarak kodlanmış, null olarak sonlandırılan dizisi
char
.İşletim sistemi tarafından tercih edilen şekilde kodlanmış, null olarak sonlandırılan dizisi
wchar_t
.UTF-16 olarak kodlanmış, null olarak sonlandırılan dizisi
char16_t
.UTF-32 olarak kodlanmış, null olarak sonlandırılan dizisi
char32_t
.
Bu gösterimler arasındaki karşılıklı dönüştürmeler, bir veya daha fazla
codecvt
model kullanılmasıyla gerektiği gibi aracılık edilir. Belirli bir yerel ayar nesnesi belirtilmezse, bu modeller genel yerel ayardan alınır.
Diğer bir fark, her işletim sisteminin dosya veya dizin erişim izinlerini belirtmenize olanak tanıyan ayrıntıdır:
Windows, bir dosyanın salt okunur mu yoksa yazılabilir mi olduğunu, dizinler için anlamı olmayan bir özniteliği kaydeder.
POSIX, bir dosyanın okunup okunamayacağını, yazılabildiğini veya yürütülebileceğini (bir dizin varsa taranabilir) kaydeder. Ayrıca, her işleme sahip, sahibin grubu veya herkes için izin verilip verilmeyeceği ile birlikte birkaç başka izin daha sağlanır.
Her iki sistem için de ortak olan, kök adı geçtikten sonra yol adına uygulanan yapıdır. yol adı c:/abc/xyz/def.ext
için:
Kök adı şeklindedir
c:
.Kök dizin şeklindedir
/
.Kök yol şeklindedir
c:/
.Göreli yol şeklindedir
abc/xyz/def.ext
.Üst yol şeklindedir
c:/abc/xyz
.Dosya adı şeklindedir
def.ext
.Gövde şeklindedir
def
.Uzantı:
.ext
.
Küçük bir fark, bir yol adındaki dizin dizisi arasında tercih edilen ayırıcıdır. Her iki işletim sistemi de eğik çizgi /
yazmanızı sağlar, ancak bazı bağlamlarda Windows ters eğik çizgi \
tercih eder. Uygulama, tercih edilen ayırıcısını içindeki veri üyesinde preferred_separator
path
depolar.
Son olarak, path
nesnelerin önemli bir özelliği vardır: üst bilgisinde <fstream>
tanımlanan sınıflarda bir dosya adı bağımsız değişkeninin gerekli olduğu her yerde bunları kullanabilirsiniz.
Daha fazla bilgi ve kod örnekleri için bkz . Dosya sistemi gezintisi (C++).
Üyeler
Sınıflar
Veri Akışı Adı | Açıklama |
---|---|
directory_entry sınıfı |
veya recursive_directory_iterator tarafından directory_iterator döndürülen ve path içeren bir nesnesini açıklar. |
directory_iterator sınıfı |
Bir dosya sistemi dizinindeki dosya adları aracılığıyla sıralayan bir giriş yineleyicisini açıklar. |
filesystem_error sınıfı |
Alt düzey sistem taşma durumunu bildirmek için atılan özel durumlar için temel sınıf. |
path sınıfı |
Dosya adı olarak kullanıma uygun şablon türüne String sahip bir nesneyi depolayan bir sınıf tanımlar. |
recursive_directory_iterator sınıfı |
Bir dosya sistemi dizinindeki dosya adları aracılığıyla sıralayan bir giriş yineleyicisini açıklar. Yineleyici alt dizinlere de inebilir. |
file_status sınıfı |
bir file_type sarmalar. |
Yapılar
Veri Akışı Adı | Açıklama |
---|---|
space_info yapı |
Birim hakkındaki bilgileri tutar. |
İşlevler
İşleçler
Listelemeler
Veri Akışı Adı | Açıklama |
---|---|
copy_options |
copy_file ile kullanılan ve bir hedef dosyanın zaten mevcut olup olmadığını belirleyen bir numaralandırma. |
directory_options |
Dizin yineleyicileri için seçenekleri belirten bir numaralandırma. |
file_type |
Dosya türleri için bir numaralandırma. |
perm_options |
İşlev için seçenekleri permissions numaralandırır. |
perms |
İzinleri ve seçenekleri izinlere iletmek için kullanılan bit maskesi türü |