std::filesystem::resize_file
Definido en el archivo de encabezado <filesystem>
|
||
void resize_file( const std::filesystem::path& p, std::uintmax_t new_size ); |
(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) |
(C++17) |
Determina el espacio libre disponible en el sistema de archivos. (función) |