home | help
std::filesy...resize_file(3)   C++ Standard Libary  std::filesy...resize_file(3)

NAME
     std::filesystem::resize_file - std::filesystem::resize_file

Synopsis
	Defined in header <filesystem>
	void resize_file( const std::filesystem::path& p, (1) (since C++17)
			  std::uintmax_t new_size );
	void resize_file( const std::filesystem::path& p,

			  std::uintmax_t new_size,	  (2) (since C++17)

			  std::error_code& ec ) noexcept;

	Changes the size of the regular file named by p as if by POSIX truncate:
     if the file
	size  was  previously larger than new_size, the remainder of the file is
     discarded. If
	the file was previously smaller than new_size,	the  file  size  is  in-
     creased and the
	new area appears as if zero-filled.

Parameters
	p	 - path to resize
	new_size - size that the file will now have
	ec	  -  out-parameter for error reporting in the non-throwing over-
     load

Return value
	(none)

Exceptions
	Any overload not marked noexcept may throw std::bad_alloc if memory  al-
     location
	fails.

	1) Throws std::filesystem::filesystem_error on underlying OS API errors,
     constructed
	with  p  as  the  first path argument and the OS error code as the error
     code argument.
	2) Sets a std::error_code& parameter to the OS API error code if  an  OS
     API call
	fails, and executes ec.clear() if no errors occur.

Notes
	On  systems that support sparse files, increasing the file size does not
     increase the
	space it occupies on the file system: space allocation takes place  only
     when
	non-zero bytes are written to the file.

Example
	Demonstrates the effect creating a sparse file has on the free space.

     // Run this code

      #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);
      }

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

See also
	file_size returns the size of a file
	(C++17)   (function)
	space	  determines available free space on the file system
	(C++17)   (function)

http://cppreference.com 	   2024.06.10	    std::filesy...resize_file(3)

home | help