我能以某种方式测试文件是否存在吗?我能用这个来只在文件存在时执行操作吗?我喜欢这样做
if(exist('members.csv')) {
do something
}
答案1
是的你可以:
\IfFileExists{filename}{true-branch}{false-branch}
请注意,这会在 LaTeX 的所有搜索路径中查找该文件,因此不仅在当前目录中,而且在树中texmf
。因此,当缺少包时,您可以将其用作“穷人的解决方案”:
\IfFileExists{upgreek.sty}{\usepackage{upgreek}}{\let\upmu\mu}
如果你确实只想在当前目录中搜索,你可以这样说
\IfFileExists{./filename}{true-branch}{false-branch}
答案2
这里的问题不仅限于 LaTeX,但这里的答案仅适用于 LaTeX。我添加了其他替代方案。
在 TeX 原始级别:
\openin15=filename % or \openin15=./filename for current directory only
\ifeof15 ... file does not exist
\else\closein15 ... file exists
\fi
你可以通过 Plain TeX 宏 分配输入文件描述符(这里是 15)\newread
。这意味着更常见的是:\newread\testfile
、\openin\tesfile=filename
和\ifeof\testfile
。
重点是 TeX 允许\openin
对不存在的文件执行操作,但在\ifeof
first 之前使用时会返回 true \read
。另一方面,如果文件存在且为空,则 first\ifeof
返回 false,first\read
定义空宏,而\ifeof
this 之后使用的\read
则返回 true。
注意:自 2020 年起,所有 TeX 引擎都允许使用\openin15={\filename}
与 TeX 82 不兼容的替代语法,但允许在文件名中使用空格。
如果您使用 OpTeX,那么有一个宏\isfile
可以执行此任务:
\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