\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{blakecromar} \pdfinfo{ /Title (c-std-filesystem.pdf) /Creator (Cheatography) /Author (blakecromar) /Subject (C++ (std::filesystem) Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{C9DB4F} \definecolor{LightBackground}{HTML}{F8FAE9} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{C++ (std::filesystem) Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{blakecromar} via \textcolor{DarkBackground}{\uline{cheatography.com/218070/cs/48229/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}blakecromar \\ \uline{cheatography.com/blakecromar} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 29th June, 2026.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{std::filesystem::path}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{std::filesystem::path my\_path = "/some/directory"; \newline std::filesystem::path sub\_path = my\_path / "subdirectory"; // appends to path \newline std::filesystem::path file\_path = my\_path / "file.txt";} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Represents a filesystem path in a cross-platform way, handling differences between operating systems automatically. \newline \newline Can be constructed from a string and supports path operations like appending with /. \newline \newline Part of the std::filesystem library introduced in C++17.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{\seqsplit{std::filesystem::remove\_all()}}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\seqsplit{std::filesystem::remove\_all(directory\_path);} // throws on error \newline std::filesystem::remove\_all(directory\_path, ec); // stores error in ec, no throw} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Removes a file OR a directory plus all of its contents recursively. \newline \newline Returns the number of files and directories removed. \newline \newline Accepts an optional std::error\_code parameter to handle errors without throwing exceptions.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{std::filesystem::exists}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\seqsplit{std::filesystem::exists("/tmp/my\_file}.txt"); // true if file exists \newline std::filesystem::exists("/tmp/my\_directory"); // true if directory exists \newline std::filesystem::exists("/tmp/missing"); // false if nothing there} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Checks whether a file or directory exists at the given path. \newline \newline Returns true if something exists at that path, false if it doesn't. \newline \newline Commonly used in tests to verify files were created or deleted.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{\seqsplit{std::filesystem::permissions}}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\seqsplit{std::filesystem::permissions(} \newline file\_path, \newline \seqsplit{std::filesystem::perms::owner\_all} | // owner can read, write, execute \newline \seqsplit{std::filesystem::perms::group\_read} | // group can read \newline \seqsplit{std::filesystem::perms::group\_exec} | // group can execute \newline \seqsplit{std::filesystem::perms::others\_read} | // others can read \newline \seqsplit{std::filesystem::perms::others\_exec} // others can execute \newline );} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Sets the access permissions on a file or directory. \newline \newline Permissions control who can read, write, or execute a file. \newline \newline Uses std::filesystem::perms flags combined with | to set multiple permissions at once.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{\seqsplit{std::filesystem::create\_directories()}}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{\seqsplit{std::filesystem::create\_directories("/tmp/my\_dir/sub\_dir/another");} \newline // creates all three directories if they don't exist \newline \newline std::filesystem::create\_directory("/tmp/my\_dir"); \newline // only creates my\_dir, fails if /tmp doesn't exist} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Creates a directory and any missing parent directories in the path. \newline \newline Does nothing if the directory already exists. \newline \newline Use create\_directory() instead if you only need to create a single directory with an existing parent.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{\seqsplit{std::filesystem::temp\_directory\_path()}}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{std::filesystem::path temp\_dir = \seqsplit{std::filesystem::temp\_directory\_path();} \newline // temp\_dir == "/tmp" on Linux \newline \newline // commonly used to build a unique temp path \newline std::filesystem::path my\_temp = \seqsplit{std::filesystem::temp\_directory\_path()} / "my\_temp\_dir"; \newline // my\_temp == "/tmp/my\_temp\_dir"} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Returns the path to the system's temporary directory. \newline \newline On Linux this is typically /tmp, on Windows it's usually C:\textbackslash{}Users\textbackslash{}username\textbackslash{}AppData\textbackslash{}Local\textbackslash{}Temp. \newline \newline Useful for creating temporary files and directories during tests that won't interfere with the real filesystem.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{\seqsplit{std::filesystem::path::string()}}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{std::filesystem::path my\_path = "/tmp/my\_directory"; \newline \newline std::string path\_string = my\_path.string(); // "/tmp/my\_directory" \newline \newline // commonly needed when passing to C functions \newline setenv("MY\_VAR", \seqsplit{my\_path.string().c\_str()}, 1);} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Converts a std::filesystem::path to a std::string. \newline \newline Necessary when passing a path to functions that expect a plain string rather than a fs::path object. \newline \newline Returns the path as a native string representation for the current operating system.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}