Error using fclose Invalid file identifier.
5 次查看(过去 30 天)
显示 更早的评论
Hi Matlab's Community,
I'm a new user of Matlab. I'm practicing my program, but I got the error:
Error using fclose
Invalid file identifier. Use fopen to generate a valid file identifier.
Error in nc_interface (line 98)
fclose(fid);
Error in nc_getatt (line 61)
[method,~,~] = nc_interface(ncfile);
Error in nc_inq (line 69)
A = nc_getatt(ncfile); % NetCDF file global attributes
Error in get_roms_grid (line 98)
Ginfo = nc_inq(Ginp);
Error in coarse2fine (line 59)
C = get_roms_grid(Ginp);
Error in wrf2roms_mw_ref (line 26)
coarse2fine(ParROMSFile,theROMSFile,eval(num2str(pgratio)),eval(num2str(pistart)),eval(num2str(piend)),eval(num2str(pjstart)),eval(n str(pjend)))
Error in generate_roms_grid (line 123)
[rho,projection] =
wrf2roms_mw_ref(theWRFFile,theROMSFile,rlim,npass,order,mini_depth,bathy_source,mod_dom,corr_ocean_mask,num_passes)
Error in run (line 86)
evalin('caller', [script ';']);
Please help me to resolve this problem. I'm really appreciated that.
I'm really sorry because it's quite specific.
Thanks all.
0 个评论
采纳的回答
Walter Roberson
2021-12-17
if (ne(fid,-1)),
signature = fread(fid,8,'uint8=>uint8');
if (strcmp(char(signature(1:3))', 'CDF')),
if (signature(4) == 1)
ftype = 'NetCDF'; % NetCDF classic
elseif (signature(4) == 2)
ftype = 'NetCDF'; % NetCDF 64bit offset
end
elseif (strcmp(char(signature(2:4))', 'HDF'))
ftype = 'NetCDF4'; % NetCDF4/HDF5
end
end
fclose(fid);
That code uses fclose() even if the fopen() failed.
In short, the file it is trying to open does not exist.
10 个评论
Walter Roberson
2021-12-20
wrf2roms_mw_ref() reads the PARENT_ID attribute from the NC file you tell it to read, and uses that parent ID to form the name of the ROMS_COAWST_grd file to read. In this case, the parent ID stored in the file is 1, so it needs ROMS_COAWST_grd1.nc
But even if it used 2 instead of 1 there: coarse2fine() needs to be able to read from the file to get values needed to create the new ROMS file, so if it used 2 at that point, it would be trying to read from ROMS_COAWST_grd2.nc before that file had been created.
The work flow cannot be used to create a new initial ROMS file; it can be used to create a new ROMS file from a wrf file using a different ROMS file as a base
更多回答(1 个)
KSSV
2021-12-17
You need not to use fopen and fclose etc for reading ncfiles in MATLAB. Reading ncfiles is very simple in MATLAB. You just need to know two functions: ncinfo/ ncdisp and ncread. Read about these functions.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 NetCDF 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!