Espacios de nombres
Variantes
Acciones

std::filesystem::resize_file

De cppreference.com
 
 
 
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.

Contenido

[editar] 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.

[editar] Valor de retorno

(Ninguno)

[editar] 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.

[editar] 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.

[editar] 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

[editar] 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]