Espacios de nombres
Variantes

std::filesystem::resize_file

De cppreference.com
 
 
 
<tbody> </tbody>
Definido en el archivo de encabezado <filesystem>
void resize_file( const std::filesystem::path& p, std::uintmax_t new_size ); void resize_file( const std::filesystem::path& p, std::uintmax_t new_size, std::error_code& ec ) noexcept;
(desde C++17)

Cambia el tamaño del archivo regular denominado por p como si fuera por la función truncate de POSIX: si el tamaño del archivo era anteriormente más grande que new_size, el resto del archivo se descarta. Si el tamaño del archivo era anteriormente más pequeño que new_size, el tamaño del archivo se incrementa y la nueva área aparece como si se hubiera rellenado con ceros.

Parámetros

p - La ruta de acceso a cambiar el tamaño.
new_size - El tamaño que ahora tendrá el archivo.
ec - El parámetro de salida para informe de errores en la sobrecarga que no lanza excepciones.

Valor de retorno

(Ninguno)

Excepciones

La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con p como el primer argumento de la ruta de acceso y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

Notas

En los sistemas que soportan archivos dispersos, aumentar el tamaño del archivo no aumenta el espacio que ocupa en el sistema de archivos: la asignación de espacio solo se realiza cuando los bytes no-cero se escriben en el archivo.

Ejemplo

Demuestra el efecto de crear un archivo disperso en el espacio libre.

#include <iostream>
#include <fstream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
    fs::path p = fs::temp_directory_path() / "ejemplo.bin";
    std::ofstream(p).put('a');
    std::cout << "Tamaño del archivo:  " << fs::file_size(p) << '\n'
              << "Espacio libre: " << fs::space(p).free << '\n';
    fs::resize_file(p, 64*1024); // cambiar el tamaño a 64 KB
    std::cout << "Tamaño del archivo:  " << fs::file_size(p) << '\n'
              << "Espacio libre: " << fs::space(p).free << '\n';
    fs::remove(p);
}

Posible salida:

Tamaño del archivo:  1
Espacio libre: 31805444096
Tamaño del archivo:  65536
Espacio libre: 31805444096

Véase también

(C++17)
Devuelve el tamaño de un archivo.
(función) [editar]
(C++17)
Determina el espacio libre disponible en el sistema de archivos.
(función) [editar]