Can I somehow test if a file exists? And can I use this to do only things when it exists? I like to do something like
if(exist('members.csv')) {
do something
}
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It only takes a minute to sign up.
Sign up to join this communityYes, you can:
\IfFileExists{filename}{true-branch}{false-branch}
Notice that this looks for the file in all search pathes of LaTeX, so not only in the current directory, but in the texmf
tree as well. Therefore, you can use it for instance for a "poor man's solution" when a package is missing:
\IfFileExists{upgreek.sty}{\usepackage{upgreek}}{\let\upmu\mu}
If you really want to search only in the current directory, you can do so by saying
\IfFileExists{./filename}{true-branch}{false-branch}
./
stops it looking in the other places.
Feb 14, 2013 at 17:56
The question was not limited to LaTeX here but the answer here is only usable in LaTeX. I add other alternatives.
At TeX primitive level:
\openin15=filename % or \openin15=./filename for current directory only
\ifeof15 ... file does not exist
\else\closein15 ... file exists
\fi
You can allocate the input file descriptor (15 here) by Plain TeX macro \newread
. It means tat more common is: \newread\testfile
, \openin\tesfile=filename
and \ifeof\testfile
.
The main point is that TeX allows to do \openin
of non-existed file, but it returns true when \ifeof
is used before first \read
. On the other hand, if the file exists and it is empty, then first \ifeof
returns false, first \read
defines empty macro and the \ifeof
(used after this \read
) returns true.
Notice: All TeX engines since 2020 allow alternative syntax \openin15={\filename}
which is incompatible with TeX 82 but allows to use spaces in file names.
If you are using OpTeX then there is a macro \isfile
for doing this task:
\isfile{filename}\iffalse ...file doesn't exist...\fi
or
\isfile{filename}\iftrue ...file do exist...\fi
or
\isfile{filename}\iftrue ...file do exist...\else ...file doesn't exist...\fi
\openin15="file name"
also work and allow spaces in file name. Not sure about the compatibility. (that having said it means "
cannot be used in file name at all)
May 13 at 3:34
\IfFileExists{file}{then-code}{else-code} \InputIfFileExists{file}{then-code}{else-code}
\IfFileExists
: tex.stackexchange.com/questions/39982/…