我的问题如上所述。我的脚本通过外部调用cmd来下载文件(使用系统函数然后使用.NET来生成按键)。问题是,当它试图打开我下载的这些文件(我下载时写的文本文件中的文件名)时,它找不到它们,导致错误。当我看到它失败后再次运行脚本时,它可以工作,但只能达到它试图再次下载/调用新文件的程度,它会遇到同样的问题。
在脚本运行期间下载的新文件是否以某种方式对搜索路径不可见?因为该文件夹绝对位于我的搜索路径中(因为它在脚本下载期间工作)。这并不是说它不能足够快地获取文件,因为它们几乎立即出现在我的文件夹中,并且我已经尝试了延迟以允许它识别它,但是没有#&# 39;工作要么。
我不确定是否注意脚本调用外部函数是否很重要,该函数尝试从我在主脚本中创建的.txt列表中读取文件。
有什么想法吗?
下载文件的脚本如下所示:
NET.addAssembly('System.Windows.Forms');
sendkey = @(strkey) System.Windows.Forms.SendKeys.SendWait(strkey);
system('start cygwinbatch.bat')
pause(.1)
sendkey(callStr1)
sendkey('{ENTER}')
pause(.1)
sendkey(callStr2)
sendkey('{ENTER}')
pause(.1)
sendkey('exit')
pause(2)
sendkey('{ENTER}')
但这不是我要问的主要原因:我确信当脚本调用它们时会发生下载,因为我看到它们出现在我调用的文件夹中。我更加困惑的是,为什么MATLAB在脚本运行时似乎并不知道它们在那里,我必须停止它并再次运行它以便识别我已经下载的那些。 / p>
谢谢,
亚伦
答案 0 :(得分:2)
这里的答案可能是运行'rehash'功能。 Matlab在执行操作时不会查找新文件,并且在某些环境中即使在交互活动期间也会丢失新文件。
运行rehash
函数会强制Matlab搜索其完整路径并确定是否有新文件。
我从未试图在操作过程中运行rehash
。 ...
答案 1 :(得分:0)
我的猜测是,MATLAB解释器正在尝试展望未来,并根据文件系统在下载文件之前的样子快照来抛出错误。如果使用F9
一次运行一行,您会得到不同的行为吗?如果是这种情况,那么您可以使用eval()
阻止口译员向前看。