Namespaces
Variants

std::filesystem:: resize_file

From cppreference.net
Défini dans l'en-tête <filesystem>
void resize_file ( const std:: filesystem :: path & p,
std:: uintmax_t new_size ) ;
(1) (depuis C++17)
void resize_file ( const std:: filesystem :: path & p,

std:: uintmax_t new_size,

std:: error_code & ec ) noexcept ;
(2) (depuis C++17)

Modifie la taille du fichier régulier nommé par p comme le ferait la fonction POSIX truncate : si la taille du fichier était précédemment supérieure à new_size , la fin du fichier est supprimée. Si le fichier était précédemment plus petit que new_size , la taille du fichier est augmentée et la nouvelle zone apparaît comme remplie de zéros.

Table des matières

Paramètres

p - chemin à redimensionner
new_size - taille que le fichier aura désormais
ec - paramètre de sortie pour le rapport d'erreurs dans la surcharge non-lancée

Valeur de retour

(aucun)

Exceptions

Toute surcharge non marquée noexcept peut lever std::bad_alloc si l'allocation de mémoire échoue.

1) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec p comme premier argument de chemin et le code d'erreur du système comme argument de code d'erreur.
2) Définit un paramètre std:: error_code & au code d'erreur de l'API du système d'exploitation si un appel d'API système échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

Notes

Sur les systèmes qui prennent en charge les fichiers épars, l'augmentation de la taille du fichier n'augmente pas l'espace qu'il occupe sur le système de fichiers : l'allocation d'espace se produit uniquement lorsque des octets non nuls sont écrits dans le fichier.

Exemple

Montre l'effet de la création d'un fichier creux sur l'espace libre.

#include <filesystem>
#include <fstream>
#include <iostream>
#include <locale>
int main()
{
    auto p = std::filesystem::temp_directory_path() / "example.bin";
    std::ofstream{p}.put('a');
    std::cout.imbue(std::locale{"en_US.UTF8"});
    std::cout << "File size:  " << std::filesystem::file_size(p) << '\n'
              << "Free space: " << std::filesystem::space(p).free << '\n';
    std::filesystem::resize_file(p, 64*1024); // resize to 64 KB
    std::cout << "File size:  " << std::filesystem::file_size(p) << '\n'
              << "Free space: " << std::filesystem::space(p).free << '\n';
    std::filesystem::remove(p);
}

Sortie possible :

File size:  1
Free space: 42,954,108,928
File size:  65,536
Free space: 42,954,108,928

Voir aussi

(C++17)
retourne la taille d'un fichier
(fonction)
(C++17)
détermine l'espace libre disponible sur le système de fichiers
(fonction)