收录日期:2021/01/28 15:51:03 时间:2016/07/31 12:13:26 标签:C++ 语言
我需要从一个文件里面随机抽取一部分数据,比如,从200字节开始抽取100字节的数据,从5000字节开始抽取200字节的数据,。。。。,
我采用的是通过索引文件获取要读的数据的起始地址和大小,
然后用seek,read的模式取得,


如果文件很大,比如,几百G,有没有更好的方法来提高效率?
用内存映射,从指定位置开始映射指定字节
内存映射我试了,提高不了效率的。
几百G?
lz做什么东西,要分析这么大的文件?
石油上的数据
使用IO完成端口,一边读写一边处理数据。
单机上,换固态硬盘应该是好方法。
lz考虑下云计算服务吧
使用IO完成端口,一边读写一边处理数据。
单机上,换固态硬盘应该是好方法。
lz考虑下云计算服务吧
。。。。。。。。。。。。。。。。。。。
提议基本上要用钱,
那就分布式计算更容易,把数据做一个数据服务器,然后让计算机器向服务器请求数据进行计算,几百G的数据,读硬盘都不知道要读多久。
用_lseeki64函数
_lseek, _lseeki64
Move a file pointer to the specified location.

long _lseek( int handle, long offset, int origin );

__int64 _lseeki64( int handle, __int64 offset, int origin );

Routine Required Header Compatibility 
_lseek <io.h> Win 95, Win NT 
_lseeki64 <io.h> Win 95, Win NT 


For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version 
LIBCMT.LIB Multithread static library, retail version 
MSVCRT.LIB Import library for MSVCRT.DLL, retail version 


Return Value

_lseek returns the offset, in bytes, of the new position from the beginning of the file. _lseeki64 returns the offset in a 64-bit integer. The function returns  –1L to indicate an error and sets errno either to EBADF, meaning the file handle is invalid, or to EINVAL, meaning the value for origin is invalid or the position specified by offset is before the beginning of the file. On devices incapable of seeking (such as terminals and printers), the return value is undefined.

Parameters

handle

Handle referring to open file

offset

Number of bytes from origin

origin

Initial position

Remarks

The _lseek function moves the file pointer associated with handle to a new location that is offset bytes from origin. The next operation on the file occurs at the new location. The origin argument must be one of the following constants, which are defined in STDIO.H:

SEEK_SET

Beginning of file

SEEK_CUR

Current position of file pointer

SEEK_END

End of file

You can use _lseek to reposition the pointer anywhere in a file or beyond the end of the file.

Example

/* LSEEK.C: This program first opens a file named LSEEK.C.
 * It then uses _lseek to find the beginning of the file,
 * to find the current position in the file, and to find
 * the end of the file.
 */

#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

void main( void )
{
   int fh;
   long pos;               /* Position of file pointer */
   char buffer[10];

   fh = _open( "lseek.c", _O_RDONLY );

   /* Seek the beginning of the file: */
   pos = _lseek( fh, 0L, SEEK_SET );
   if( pos == -1L )
      perror( "_lseek to beginning failed" );
   else
      printf( "Position for beginning of file seek = %ld\n", pos );

   /* Move file pointer a little */
    _read( fh, buffer, 10 );

   /* Find current position: */
   pos = _lseek( fh, 0L, SEEK_CUR );
   if( pos == -1L )
      perror( "_lseek to current position failed" );
   else
      printf( "Position for current position seek = %ld\n", pos );

   /* Set the end of the file: */
   pos = _lseek( fh, 0L, SEEK_END );
   if( pos == -1L )
      perror( "_lseek to end failed" );
   else
      printf( "Position for end of file seek = %ld\n", pos );

   _close( fh );
}


Output

Position for beginning of file seek = 0
Position for current position seek = 10
Position for end of file seek = 1207


Low-Level I/O Routines

See Also   fseek, _tell
1.lseeki64,我想它只是提供了能随机访问大文件的功能,但是,效率上有没有更好的方法呢?
2.云计算,分布式,这些可能都不行,我们的客户需要在笔记本或便携式台式机上运行该软件,也就是只能在微机上运行,请问,有没有好的办法?

为什么提交一次,而在数据表里插入了2条相同的记录? 一个特别烦心的问题!高手进来看看! 100分请教有关gif压缩问题 哪位朋友知道有 rose 2003 下载地址????????????? 哪位大虾能告诉我Windows里,组合框中的下拉是采用什么方式做出来的啊? DataGrid问题,在线等待中 信息发布时用Id传值的问题? 一个SQL查询语句的问题,请大侠们指教!!! 高手请看看这个DTS的ActiveX脚本是什么错误呀 让我想了很久的问题:要求用CS方式,多线程的TCP/IP通信程序,要求能给我做个实际例子,给我例子代码,再给40分 [急]请问下面这个SQL语句怎么写,头大啊 高手过来帮帮我啊 tomcat服务器设置为虚拟主机 数据库连接问题 秀一下:我上CSDN论坛的次数(有图)! 5.1要去女朋友家里,请问水友们,我要做哪些准备呢?(顺便散分) 求助:我用applet做的一个线形报表,重绘时,最后一次的线总在上面 PrintDocument打印分页的问题 VB调用VC的myDll.DLL时出现“调用约定错误”?请问在VB中如何定义VC的DLL中的函数参数指针做?VC的myDll.DL的函数如下L如下: DataGrid里的checkbox翻页时怎么保持选中状态? linux下java socket不能监听问题 一个数据库查询问题,请高手指教~~在线等 工作好累啊 faint!打算转档案,结果要办暂住证 一个派生类构造函数的问题 各位兄弟朋友,现在有功耗低的主机么?不过80w的主机?要低功耗pc,不要热电炉. JSP中如何取出Radio的值存入数据库中? 急问!!visual studio安装提示注册visdata.exe失败!!!在线等 我需要所以我~~~ 有没有现成的这样的类? 求一个好的优化方案