Error using fclose Invalid file identifier.
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Manh Nguyen
le 17 Déc 2021
Commenté : Manh Nguyen
le 20 Déc 2021
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 commentaires
Réponse acceptée
Walter Roberson
le 17 Déc 2021
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 commentaires
Walter Roberson
le 20 Déc 2021
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
Plus de réponses (1)
KSSV
le 17 Déc 2021
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.
Voir également
Catégories
En savoir plus sur NetCDF dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!