<p align="center"<img src="Screenshots/FileArbLogo.png" width="64%"<br</p
|Build Type|Build Status| |----------|------------| |Clang 18 and GCC 13 on ubuntu-latest|<a href="https://github.com/NeilJustice/FileArb/actions/workflows/linuxbuild.yml"<img src="https://github.com/NeilJustice/FileArb/actions/workflows/linuxbuild.yml/badge.svg"</a| |VS2026 on windows-2025-vs2026|<a href="https://github.com/NeilJustice/FileArb/actions/workflows/windowsbuild.yml"<img src="https://github.com/NeilJustice/FileArb/actions/workflows/windowsbuild.yml/badge.svg"</a| |GCC lcov code coverage|<a href="https://codecov.io/gh/NeilJustice/FileArb"<img src="https://codecov.io/gh/NeilJustice/FileArb/graph/badge.svg?token=4PPGGBZXES"</a|
FileArb is a C++ command line program for quickly creating in parallel an arbitrary number of arbitrarily large text files or binary files.
Three use cases for FileArb:
- Performance testing the write speed of storage hardware such as USB drives, NVMe drives, and network file shares.
- Performance testing file-I/O-intensive programs such as <a href="https://github.com/NeilJustice/FileRevisor"FileRevisor</a.
- Learning the file write performance differences between Linux filesystems such as Btrfs versus F2FS versus XFS.
- FileArb command line usage
- FileArb program modes
- create-binary-file
- create-binary-files
- create-text-file
- create-text-files
- Steps to build binary filearb on Linux with Clang
- Steps to build FileArb.exe on Windows with Visual Studio 2026
- Acknowledgements
FileArb command line usage
FileArb v1.1.0
Optional suffixes for --bytes arguments: b or B, k or K, m or M, and g or G.
Usage:
filearb create-binary-file
--target=<DirectoryPath>
--bytes=<NumberOfBytes>
[--random-bytes]
filearb create-binary-files
--target=<DirectoryPath>
--directories=<NumberOfDirectories>
--files=<NumberOfFiles>[--random-bytes] [--parallel] [--quiet] filearb create-text-file --target=<DirectoryPath --lines=<LinesPerFile --characters=<CharactersPerLine [--random-letters] filearb create-text-files --target=<DirectoryPath --directories=<NumberOfDirectories --files=<FilesPerDirectory --lines=<LinesPerFile --characters=<CharactersPerLine [--random-letters] [--parallel] [--quiet]
## FileArb program modes
### create-binary-file
filearb create-binary-file --target=<DirectoryPath --bytes=<NumberOfBytes [--random-bytes]
`create-binary-file` creates in a specified `--target` directory a file named `binaryfile.bin` containing `--bytes` number of binary 0 bytes.
Console output for `filearb create-binary-file --target=. --bytes=2G` on Linux:

Console output for `FileArb.exe create-binary-file --target=. --bytes=2G` on Windows:

--random-bytes can be specified to create a binary file containing pseudorandom bytes sampled from std::randomdevice.
Here are the contents of one potential random binary file after running filearb create-binary-file --target=C:\FileArbTesting --bytes=64 --random-bytes:
create-binary-files
filearb create-binary-files
--target=<DirectoryPath>
--directories=<NumberOfDirectories>
--files=<NumberOfFiles>
--bytes=<BytesPerFile>
[--random-bytes]
[--parallel]
[--quiet]create-binary-files creates in a specified --target directory a specified number of --directories each containing a specified number of --files each containing --bytes number of 0 bytes or [--random-bytes].