Namespaces
Variants

std::filesystem:: resize_file

From cppreference.net
Definido en el encabezado <filesystem>
void resize_file ( const std:: filesystem :: path & p,
std:: uintmax_t new_size ) ;
(1) (desde C++17)
void resize_file ( const std:: filesystem :: path & p,

std:: uintmax_t new_size,

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

Cambia el tamaño del archivo regular nombrado por p como si fuera mediante POSIX truncate : si el tamaño del archivo era previamente mayor que new_size , el resto del archivo se descarta. Si el archivo era previamente menor que new_size , el tamaño del archivo se incrementa y la nueva área aparece como si estuviera llena de ceros.

Contenidos

Parámetros

p - ruta a redimensionar
new_size - tamaño que tendrá ahora el archivo
ec - parámetro de salida para reporte de errores en la sobrecarga no lanzadora

Valor de retorno

(ninguno)

Excepciones

Cualquier sobrecarga no marcada como noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

1) Lanza std::filesystem::filesystem_error en errores de API del sistema operativo subyacente, construido con p como primer argumento de ruta y el código de error del sistema operativo como argumento de código de error.
2) Establece un parámetro std:: error_code & al código de error de la API del sistema operativo si una llamada a la API del SO falla, y ejecuta ec. clear ( ) si no ocurren errores.

Notas

En sistemas que admiten archivos dispersos, aumentar el tamaño del archivo no incrementa el espacio que ocupa en el sistema de archivos: la asignación de espacio ocurre únicamente cuando se escriben bytes distintos de cero en el archivo.

Ejemplo

Demuestra el efecto que tiene la creación de un archivo disperso en el espacio 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);
}

Salida posible:

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

Véase también

(C++17)
devuelve el tamaño de un archivo
(función)
(C++17)
determina el espacio libre disponible en el sistema de archivos
(función)