C# 调用NetCdf.dll 读取NC文件

lzw93 2017-05-18 01:50:52
我使用NetCdf.dll读取NC文件有的成功,有的失败,谁能解决啊(data2是我需要的结果),跪求,我的代码:
NetCDFInterop.nc_open(FileName, NetCDFInterop.CreateMode.NC_NOWRITE, out i);
NetCDFInterop.nc_inq_dimid(i, "time", out dimid);//设置时间序列,
NetCDFInterop.nc_inq_dimlen(i, dimid, out time_length);//获取时间序列的长度

NetCDFInterop.nc_inq_dimid(i, "lat", out dimid);//设置纬度序列
NetCDFInterop.nc_inq_dimlen(i, dimid, out lat_length);//获取纬度序列的长度

NetCDFInterop.nc_inq_dimid(i, "lon", out dimid);//设置经度序列
NetCDFInterop.nc_inq_dimlen(i, dimid, out lon_length);//获取经度序列的长度

NetCDFInterop.nc_inq_dimid(i, "level", out dimid);//设计层别序列
NetCDFInterop.nc_inq_dimlen(i, dimid, out level_length);//获取层序列长度
float[, ,] data2 = new float[time_length, lat_length, lon_length];
NetCDFInterop.nc_inq_varid(i, "gh", out temp_varid);

NetCDFInterop.nc_get_var_float(i, temp_varid, data2);
public static class NetCDFInterop
{

[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_open(string path, CreateMode omode, out int ncidp);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_close(int ncidp);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varid(int ncid, string nvars, out int varid);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_get_var_float(int ncid, int varid, float[, ,] ip);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_get_var_float(int ncid, int varid, float[, , ,] ip);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_get_var_float(int ncid, int varid, float[,] ip);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_get_var_float(int ncid, int varid, int[,] ip);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq(int ncid, out int ndims, out int nvars, out int ngatts, out int unlimdimid);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_dim(int ncid, int dimid, string name, out int length);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_dimname(int ncid, int dimid, StringBuilder name);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_dimid(int ncid, string name, out int dimid);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_dimlen(int ncid, int dimid, out int length);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_ndims(int ncid, out int ndims);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_nvars(int ncid, out int nvars);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varname(int ncid, int varid, StringBuilder name);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_varndims(int ncid, int varid, out int ndims);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_vardimid(int ncid, int varid, int[] dimids);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_var_fill(int ncid, int varid, out int no_fill, out object fill_value);
[DllImport("netcdf.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_inq_var(int NCID, int VARID, out string name, out int xtype, out int ndims, out int dimids, out int natts);
[DllImport("netcdf.dll",CallingConvention = CallingConvention.Cdecl)]
public static extern int nc_create(string path, CreateMode mode, out int ncidp);
public enum CreateMode : int
{
NC_NOWRITE = 0,
/// read & write
NC_WRITE = 0x0001,
NC_CLOBBER = 0,
/// Don't destroy existing file on create
NC_NOCLOBBER = 0x0004,
/// argument to ncsetfill to clear NC_NOFILL
NC_FILL = 0,
/// Don't fill data section an records
NC_NOFILL = 0x0100,
/// Use locking if available
NC_LOCK = 0x0400,
/// Share updates, limit cacheing
NC_SHARE = 0x0800,
NC_64BIT_OFFSET = 0x0200,
/// Enforce strict netcdf-3 rules
NC_CLASSIC = 0x0100,
/// causes netCDF to create a HDF5/NetCDF-4 file
NC_NETCDF4 = 0x1000
}
}
...全文
1751 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctgiser 2017-10-26
  • 打赏
  • 举报
回复
楼主解决了吗?我现在用vs2012添加dll文件都添加不上,是环境32.64位?还是c#就不支持,求帮助!

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧