暂停 MATLAB 脚本,直到在目录中生成文件

Pausing MATLAB script until file is generated in directory

我编写了一个执行以下操作的脚本:首先它将文本文件写入指定目录,然后通过 PowerShell 命令为 Post 处理器调用此文本文件,我也在 MATLAB 中调用该命令为了生成结果 *.csv 文件。最后,脚本会在这个生成的 *.csv 文件中格式化数据并绘制结果。

问题是脚本只能在给定文件放入目录后才能继续 - 特别是在 *.csv 文件的情况下,这可能需要 10-15 秒。目前我只是加了一种提示用户等待的断点,如下:

fprintf("Check if *.csv is present in directory - then click 'Continue' \n")
keyboard;

我猜有更好的方法来做到这一点 - 理想情况下 运行 脚本,在给定点自动等待,直到目录中出现指定文件,然后继续 运行宁代码。

如何自动检查 *.csv 文件是否存在?

您可以使用 exist()。此函数检查变量、函数、文件、文件夹等是否存在。将其放在 if 语句中应该可以解决问题:

if exist('your_file.csv')
    % Run your code
end

您可以使用 isfile (post R2017b) 检查文件 filename 是否存在,如下所示:

if isfile(filename)
     % File exists.
else
     % File does not exist.
end

R2017b 之前你可以使用 if exist(filename, 'file') == 2.

您可以通过以下方式将其与循环结合起来:

t_Start = tic;     % Start stopwatch timer (to set a maximum time)
dt = 2;            % Check every dt seconds (example dt = 2)
while isfile(filename) == false && toc(t_Start) < 60  % maximum 60 seconds
    pause(dt);
    time_counter = time_counter + dt;
end

% Continue with your code here.

我正在使用 while lopp 检查文件是否存在,并在每次检查之间等待 2 秒。没有理由每毫秒检查一次,除非你很着急。你当然可以改变这个。

t_Start = tic;toc(t_start) < 60 是在 60 秒后停止循环的秒表。仅使用 tictoc < 60 也可以,但这会在循环外重置 tic/toc 调用,如果有的话。

请注意 isfile(filename) == false~isfile(filename) 相同,但对于初学者来说更容易阅读。