您的位置:首页 > 编程语言 > C语言/C++

windows下VS2010中使用netcdf的C++接口实现.nc文件的读写

2014-05-07 11:32 826 查看
一、下载所需要的资源

a.使用的netcdf的C++接口版本:netcdf-cxx-4.2.tar.gz,下载地址:http://www.unidata.ucar.edu/downloads/netcdf/netcdf-cxx/index.jsp

b.下载需要的库文件:netCDFcpp.zip,下载地址:http://s.pudn.com/search_hot.asp?k=NetCDF#

二、项目的创建

a.解压下载的netcdf-cxx-4.2.tar.gz文件,得到cxx,example,m4和man4文件,还有一些其他配置文件;

b.将解压后文件中的config.h.in这个文件名改成config.h;

c.创建工程项目,然后以添加现有项的方式分别将需要的config.h和cxx文件夹中的ncvalues.h,netcdfcpp.h和ncvalues.cpp,netcdf.cpp这五个文件添加到工程头文件和源文件中;

三、项目的配置

a.包含文件:在VS项目属性—VC++目录—包含目录,添加config.h,netcdfcpp.h,ncvalues.h和netcdf.h头文件所在的位置;

b.库目录:VS项目属性—VC++目录—库目录,添加netcdf.lib库文件的位置;

VS项目属性—链接器—输入—附加依赖项,添加netcdf.lib库文件;

VS项目属性—链接器—常规—附加库目录,添加bin文件中的netcdf.dll路径;

四、测试成功与否

a.NC文件的创建:创建simple_xy.nc,并写入数据;

#include <iostream>

#include <netcdfcpp.h>

using namespace std;

static const int NX = 6;

static const int NY = 12;

static const int NC_ERR = 2;

int main(void)

{

int dataOut[NX][NY];

for(int i = 0; i < NX; i++)

for(int j = 0; j < NY; j++)

dataOut[i][j] = i * NY + j;

NcFile dataFile("simple_xy.nc", NcFile::Replace);

if(!dataFile.is_valid())

{

cout << "Couldn't open file!\n";

return NC_ERR;

}

NcDim* xDim = dataFile.add_dim("x", NX);

NcDim*yDim = dataFile.add_dim("y", NY);

NcVar *data = dataFile.add_var("data", ncInt, xDim, yDim);

data->put(&dataOut[0][0], NX, NY);

cout << "*** SUCCESS writing example file simple_xy.nc!"<< endl;

return 0;

}

b.读取simple_xy.nc中的数据;(此时需将生成的simple_xy.nc文件放到项目所在的目录下)

#include <iostream>

#include <netcdfcpp.h>

using namespace std;

static const int NX = 6;

static const int NY = 12;

static const int NC_ERR = 2;

int main(void)

{

int dataIn[NX][NY];

NcFile dataFile("simple_xy.nc", NcFile::ReadOnly);

if(!dataFile.is_valid())

{

cout << "Couldn't open file!\n";

return NC_ERR;

}

NcVar *data = dataFile.get_var("data");

data->get(&dataIn[0][0], NX, NY);

for (int i = 0; i < NX; i++)

for (int j = 0; j < NY; j++)

{

if(dataIn[i][j] != i * NY + j)

return NC_ERR;

cout<<dataIn[i][j]<<endl;

}

cout << "*** SUCCESS reading example file simple_xy.nc!"<< endl;

system("pause");

return 0;

}

控制台窗口会显示0,1,2,3,4,....71数据,则成功!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: