运行Matlab代码(附件)时出错,连续检查并以给定的时间间隔(2秒)打开两个.txt文件,并根据结果对这两个文件进行值比较,选择一个或另一个并使用它.... 这两个文件由Java脚本以2秒的相同时间间隔不断保存和更新。 所有文件都位于同一路径中。
我得到的错误是:"文件标识符无效。使用fopen生成有效的文件标识符
KinectDEMelevation_with_filecomparison2中的错误(第36行) DEM1 = textscan(FID2,formatSpec,' HeaderLines',6,'分隔符'' \ B&#39); "
代码是:
DEM = GRIDobj('kinectDEM0.txt');
clims = [-30 140];
imagesc(DEM,clims);
colormap(jet);
hold on
while(1)
tic
% clear all
% clf
% load('MyColormaps','mycmap');
%% Get kinectDEM0 data
% Open 'kinectDEM0.txt'
fid1 = fopen('kinectDEM0.txt', 'r+');
% Read data in from the .txt file
formatSpec = '%n';
DEM0 = textscan(fid1,formatSpec,'HeaderLines',6,'Delimiter','\b');
% Extract data from DEM0
DEM0Data = DEM0{1,1}(200:100:287800,1);
% Close 'kinectDEM0.txt'
fclose(fid1);
%% Get kinectDEM1 data
% Open 'kinectDEM1.txt'
fid2 = fopen('kinectDEM1.txt', 'r+');
% Read data in from the .txt file
formatSpec = '%n';
DEM1 = textscan(fid2,formatSpec,'HeaderLines',6,'Delimiter','\b');
% Extract data from DEM1
DEM1Data = DEM1{1,1}(200:100:287800,1);
% Close 'kinectDEM1.txt'
fclose(fid2);
%% Compare data, a logical array return 1 for true (points that has been changed), 0 for false
test = eq(DEM0Data,DEM1Data);
num = sum(test); % numbers of point in the scene that has been changed
threshold = 2900; % after this threshold update the image
if num > threshold
DEM = GRIDobj('kinectDEM1.txt');
clf
clims = [-30 140];
imagesc(DEM,clims);
colormap(jet);
hold on
end
T = toc;
pause(2 - T);
end
我该如何解决?
由于
答案 0 :(得分:0)
您应该添加一些错误检查以确保文件:
首先,您可以使用exist
:
r = exist('kinectDEM0.txt','file');
% will return 2 if file exists
对于第二个,您需要检查fid
是否有效。如果fopen
无法打开文件,则为-1。您还可以使用fopen
,errmsg
的第二个输出进行其他检查;如果文件成功打开,errmsg
应为空字符串,否则将返回系统错误消息,例如“No such file or directory”。
一个简单的例子:
fid = -1
while fid == -1
fid = fopen('myfile.txt'); % attempt to open until success
end