c++ 处理大文件

最近写一个小工程,要读写大文件,10~20G。

开始经过一番考虑,考虑到c函数的高效与操作难度(以前用c的函数,总忘关文件)。直接使用了C++的ifstream,用类操作比较方便。由于随机读取文件位置,所以需要找办法能读取到任一位置,这在处理小文件时没有问题,但在处理大于4G文件时出现了问题。

以前在linux下,没多考虑什么,c和c++处理大于4G文件都没有问题,现在才知道原来是64位linux系统,默认编64位程序了,所有的操作都在编译时因为特殊的宏而具有了处理大于4G文件的能力。

这回在windows下编译的32位程序,程序中封装ifstream做了一个随机读取类,结果发现大约到3.4G的时候,总也读不过去了。查了一下,发现c++ 标准库中ifstream中的streamoff默认编译的32,于是ifstream::fseek(streampos pos)是无效,然后考虑使用,ifstream::seekg (streamoff off, ios_base::seekdir way),结果发现这个ios_base::seekdir也是只能处理32位的文件长度。

无奈之下,google一次,获得msdn的函数 _fseeki64 , _ftelli64,完美解决问题。

msdn网址http://msdn.microsoft.com/zh-tw/library/vstudio/0ys3hc0b(v=vs.80).aspx , http://msdn.microsoft.com/zh-cn/library/vstudio/75yw9bf3.aspx

然后为了配合c函数,我找了相应c函数来查看文件状态。 


feof(FILE* fp)查看文件是否到结尾,到结尾返回true

ferror(FILE* fp)查文件是否状态异常,文件正常返回0

clearerr(FILE*fp)清空文件各种错误标志位。包括文件结尾标志和文件读取越界等错误。

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); 读取文件内容,这个函数非常高效。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
处理 Excel 文件的一般步骤如下: 1. 引入相应的库和头文件,例如使用 `Microsoft Excel COM` 库,需要添加头文件 `#include <windows.h>`,`#include <ole2.h>`,`#include <ocidl.h>`,`#include <oaidl.h>`,`#include <excel8.h>` ,并链接相应的库。 2. 创建 `Excel Application` 对象,并打开 Excel 文件。可以使用 `CoInitialize(NULL)` 初始化 COM,使用 `CoUninitialize()` 释放 COM。 ```c++ // 初始化 COM CoInitialize(NULL); // 创建 Excel Application 对象 _ApplicationPtr pExcelApp; HRESULT hr = pExcelApp.CreateInstance(L"Excel.Application"); // 打开 Excel 文件 _WorkbookPtr pWorkbook; hr = pExcelApp->Workbooks->Open(_T("C:\\path\\to\\file.xlsx")); // 释放 COM pExcelApp->Quit(); CoUninitialize(); ``` 3. 获取 `Worksheet` 对象,读取或修改单元格数据。可以使用 `_Worksheet::Cells` 属性来获取单元格对象,使用 `Range` 属性来获取单元格范围对象,使用 `Value` 属性来读写单元格数据。 ```c++ _WorksheetPtr pWorksheet = pWorkbook->Worksheets->Item[1]; // 读取单元格数据 _variant_t var = pWorksheet->Cells->Item[rowIndex][columnIndex]->Value; // 修改单元格数据 pWorksheet->Cells->Item[rowIndex][columnIndex]->Value = _variant_t("new value"); ``` 4. 保存 Excel 文件,并关闭 Excel Application 对象。 ```c++ // 保存 Excel 文件 pWorkbook->Save(); // 关闭 Excel 文件和 Excel Application 对象 pWorkbook->Close(); pExcelApp->Quit(); ``` 以上是使用 Microsoft Excel COM 库处理 Excel 文件的简单步骤,也可以使用其他库或工具来处理 Excel 文件,例如 `LibXL`、`OpenOffice.org`、`Apache POI` 等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值