为什么我突然在MATLAB中得到无效的文件标识符错误?

时间:2014-02-17 06:50:45

标签: matlab

代码:

list_of_files=dir(fullfile('/home/username/Desktop/Old/MTP/tfcodev2p1/data/', '*.dat'));

该文件夹中有50个dat文件。奇怪的是它一直工作到昨晚。现在我突然得到这个错误。错误:

Error using fseek
Invalid file identifier.  Use fopen to generate a
valid file identifier.

Error in getvar>get_convar (line 162)
fseek(f,8*mesh.n*(sim.nvars*t+VARS) , 'bof');

Error in getvar (line 82)
  data=get_convar(fname,sim,mesh,VARS,t);

Error in realn (line 34)
       D1=getvar(list_of_files(i).name,sim,mesh,'rhoi',sim.nsaves);

我正在研究Ubuntu 12.04。我已经尝试将我的数据放在不同的文件夹中,但仍然遇到同样的错误。

这是代码。 文件realn.m:

list_of_files=dir(fullfile('/home/rishi/Desktop/Old/MTP/tfcodev2p1/data', '*.dat'));
%simulation details
%display(list_of_files.name);
hold off;
sim.tend=0.1;
sim.gamma=5.0/3.0;
sim.nsaves=1;
sim.nvars=20;
sim.dim=1;
sim.mass_ratio=1.0;
%mesh details
mesh.nx=100; %number of cells in x-direction
mesh.ny=1; %number of cells in y-direction
mesh.maxx=1.0;
mesh.maxy=0;
mesh.n=mesh.nx*mesh.ny;
mesh.x=linspace(0,mesh.maxx,mesh.nx);

N=100;
n=51;
tau=0.0001;
h=1/N;
lambda=tau/h;
mu=lambda/2;
uf=zeros(n,1);
uf1=zeros(n,1);
uf2=zeros(n,1);
phi=zeros(n,1);
for i=1:n
    phi(i,1)=2*pi*i/N;    
end
for i=1:length(list_of_files)
   display(list_of_files(i).name)
       D1=getvar(list_of_files(i).name,sim,mesh,'rhoi',sim.nsaves);
       D2=getvar(list_of_files(i).name,sim,mesh,'rhoi',0);
   for j=1:N
       uf1(i,1)=uf1(i,1)+(D1(j)*exp(-1i*j*phi(i)));
       uf2(i,1)=uf2(i,1)+(D2(j)*exp(-1i*j*phi(i)));
   end
   uf1(i,1)=uf1(i,1)/100;
   uf2(i,1)=uf2(i,1)/100;
end

getvar.m

function data=getvar(fname,sim,mesh,V,t)
 NVARS=36;
 VARS=0;
 //switch upper(V)


 if (VARS<sim.nvars)
  data=get_convar(fname,sim,mesh,VARS,t);
 elseif(VARS<NVARS)
  data=get_extravar(fname,sim,mesh,VARS,t);
 else
    display('WRONG Variable: Check function getvars()')
 end

function data=get_extravar(fname,sim,mesh,VARS,t)

switch VARS
    case {20}
        mxe=get_convar(fname,sim,mesh,6,t);
        data=-mxe/sim.mass_ratio;    
    case {21}
        mye=get_convar(fname,sim,mesh,7,t);
        data=-mye/sim.mass_ratio;            
    case {22}
        mze=get_convar(fname,sim,mesh,8,t);
        data=-mze/sim.mass_ratio;      
    case {23}
        mxi=get_convar(fname,sim,mesh,1,t);
        data=mxi; %assuume that m_i=1.0 
    case {24}
        myi=get_convar(fname,sim,mesh,2,t);
        data=myi; %assuume that m_i=1.0 
    case {25}
        mzi=get_convar(fname,sim,mesh,3,t);
        data=myi; %assuume that m_i=1.0 
    case {26}
        rhoe=get_convar(fname,sim,mesh,5,t);
        mxe=get_convar(fname,sim,mesh,6,t);
        data=mxe./rhoe;    
    case {27}
        rhoe=get_convar(fname,sim,mesh,5,t);
        mye=get_convar(fname,sim,mesh,7,t);
        data=mye./rhoe;
    case {28}
        rhoe=get_convar(fname,sim,mesh,5,t);
        mze=get_convar(fname,sim,mesh,8,t);
        data=mze./rhoe;
    case {29}
        rhoi=get_convar(fname,sim,mesh,0,t);
        mxi=get_convar(fname,sim,mesh,1,t);
        data=mxi./rhoi;
    case {30}
        rhoi=get_convar(fname,sim,mesh,0,t);
        myi=get_convar(fname,sim,mesh,2,t);
        data=myi./rhoi;
    case {31}
        rhoi=get_convar(fname,sim,mesh,0,t);
        mzi=get_convar(fname,sim,mesh,3,t);
        data=mzi./rhoi;     
    case {32}
        mxe=get_convar(fname,sim,mesh,6,t);
        mye=get_convar(fname,sim,mesh,7,t);
        mze=get_convar(fname,sim,mesh,8,t);
        data=sqrt(mxe.^2 + mye.^2 + mze.^2);
    case {33}
        mxi=get_convar(fname,sim,mesh,1,t);
        myi=get_convar(fname,sim,mesh,2,t);
        mzi=get_convar(fname,sim,mesh,3,t);
        data=sqrt(mxi.^2 + myi.^2 + mzi.^2);
    case {34}
        mze=get_convar(fname,sim,mesh,8,t);
        mzi=get_convar (fname,sim,mesh,3,t);
        data=abs(mzi-mze/sim.mass_ratio);   
   case {35}
       mxe=get_convar(fname,sim,mesh,6,t);
       mye=get_convar(fname,sim,mesh,7,t);
       mze=get_convar(fname,sim,mesh,8,t);

        mxi=get_convar (fname,sim,mesh,1,t);
        myi=get_convar (fname,sim,mesh,2,t);
        mzi=get_convar (fname,sim,mesh,3,t);
        data=abs(mxi + myi + mzi-(mxe+mye+mze)/sim.mass_ratio);        
end

function data=get_convar(fname,sim,mesh,VARS,t)
f=fopen(fname,'r');
if (VARS<sim.nvars)
fseek(f,8*mesh.n*(sim.nvars*t+VARS) , 'bof');
if (sim.dim==1)
data=fread(f,[mesh.nx],'float64');
elseif(sim.dim==2)
    data=fread(f,[mesh.ny,mesh.nx],'float64');
else
     error('Check Dimension');
end
else
    error('Variable is out of range Use function get_extravar')
end
data=data';
fclose(f);

1 个答案:

答案 0 :(得分:1)

我能说的唯一可以帮助的地方(我显然无法重现这个问题)就是使用help fopen中的这一行:

  

[FID,MESSAGE] = FOPEN(FILENAME,...)返回系统相关错误   如果打开不成功,则显示消息。

get_convar函数中植入此内容,然后查看MESSAGE。这应该至少给你一个关于可能发生什么的提示。

请让我发布,因为我一直在寻找文件I / O可能搞砸的新方法,以便更好地加强我自己的文件读/写程序:)