2

我需要在目录中的文件进入时对其进行数据分析。

我想知道,如果它更好,

  1. 在目录上实现一个事件监听器,并在激活时启动分析过程。然后让程序永远进入睡眠状态:while(true), sleep(1e10), end

  2. 或有一个循环轮询更改和反应。

我个人更喜欢听者的方式,因为一个人能够对几乎同时出现的两个新文件开始两次分析,但会导致两个事件。而另一种解决方案可能只处理第一个,然后找到第二个新数据。选项 1 的附加想法:通过调用和设置匹配的-frame来
隐藏 matlab GUI 。(这个想法取自Yair Altmanframes=java.awt.Frame.getFramesframes(index).setVisible(0)indexcom.mathworks.mde.desk.MLMainFrame

还有其他方法可以实现这些事情吗?

4

1 回答 1

5

在这种情况下,(如果您使用的是 Windows),最好的方法是使用.NET.

fileObj = System.IO.FileSystemWatcher('c:\work\temp');
fileObj.Filter = '*.txt';
fileObj.EnableRaisingEvents = true;
addlistener(fileObj,'Changed',@eventhandlerChanged);

有不同的事件类型,您可以为它们使用相同的回调,也可以使用不同的回调:

addlistener(fileObj, 'Changed', @eventhandlerChanged );
addlistener(fileObj, 'Deleted', @eventhandlerChanged );
addlistener(fileObj, 'Created', @eventhandlerChanged );
addlistener(fileObj, 'Renamed', @eventhandlerChanged );

eventhandlerChanged你的回调函数在哪里。

function eventhandlerChanged(source,arg)
   disp('TXT file changed')
end

无需使用sleep或轮询。如果你的程序是基于 UI 的,那么就没有什么可做的了,当用户关闭图形时,程序就结束了。事件回调的执行与按钮单击完全相同。如果您的程序类似于脚本,则可以使用无限循环。

更多信息在这里: http: //www.mathworks.com/help/matlab/matlab_external/working-with-net-events-in-matlab.html

于 2012-06-06T14:01:51.423 回答