我可以测试一个文件是否存在吗?

我可以测试一个文件是否存在吗?

我能以某种方式测试文件是否存在吗?我能用这个来只在文件存在时执行操作吗?我喜欢这样做

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对不存在的文件执行操作,但在\ifeoffirst 之前使用时会返回 true \read。另一方面,如果文件存在且为空,则 first\ifeof返回 false,first\read定义空宏,而\ifeofthis 之后使用的\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

相关内容