Error using fclose Invalid file identifier.
6 ビュー (過去 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!