MATLAB®金宝app支持使用64位墨西哥人文件中文件I / O操作程序。你可以读取和写入数据文件和大于2 GB (2还有字节)。一些操作系统和编译器不支持文件大于2 GB。金宝app以下主题描述如何使用64位墨西哥人文件文件I / O。
头文件io64.h
定义了许多类型和功能所需的64位文件I / O。声明必须包含这个文件第一个# include
声明你的源文件,还必须先于任何系统头包括语句:
# include“io64。h mex.h“# include
声明变量用于64位文件I / O,使用以下类型。
墨西哥人类型 |
描述 |
POSIX |
---|---|---|
|
这是一个64位的说的 |
|
|
宣布64位签署和无符号整数类型。中定义的 |
|
|
声明一个结构来保存一个文件的大小。中定义的 |
|
|
中使用的 |
|
|
后缀为文字 |
|
使用下面的函数64位文件I / O。都是在头文件中定义的io64.h
。
函数 |
描述 |
POSIX |
---|---|---|
|
得到一个文件描述符从文件指针 |
|
|
打开该文件并获得文件指针 |
|
|
获取文件大小给定文件的指针 |
|
|
得到文件的位置在接下来的I / O |
|
|
获取给定文件名的文件大小 |
|
|
设置文件位置为下一个I / O |
|
将签署和无符号64位整数文字值,使用类型定义int64_T
和uint64_T
。
在UNIX系统中,将一个文本值分配给一个整数变量的值大于分配231日1
签署,必须后缀与价值噢
。如果该值大于2321
无符号,然后用LLU
作为后缀。这些后缀不是有效的在微软®窗户®系统。
请注意
的噢
和LLU
后缀不需要硬编码值小于(文字)2 G (231日1)
,即使他们被分配到一个64位的int
类型。
下面的示例声明一个64位整数变量初始化,文字int
价值,和两个64位整数变量:
空白mexFunction (int nlhs mxArray * plhs [], int nrhs, const mxArray * prhs[]){#如果定义(_MSC_VER) | | (__BORLANDC__)定义Windows * / / * int64_T large_offset_example = 9000222000;#其他UNIX / * * / int64_T large_offset_example = 9000222000我;# endif int64_T抵消= 0;int64_T位置= 0;
读写打开一个文件,使用C / c++打开外部文件
像平时一样的函数。只要你有包括在内io64.h
在程序的开始,打开外部文件
大文件的正常工作。任何更改要求从文件中读
,写入文件
,流
,fscanf
,文件关闭
。
下面的语句打开一个已存在的文件以二进制模式用于读取和更新。
fp = fopen(文件名,“r + b”);如果(NULL = = fp){/ *文件不存在。创建新的文件编写*以二进制模式。* / fp = fopen(文件名,“世界银行”);如果(NULL = = fp) {sprintf (str,“未能打开/创建测试文件“% s”,文件名);mexErrMsgIdAndTxt (“MyToolbox: myfnc: fileCreateError”, str);返回;其他}{mexPrintf(“新创建的测试文件' % s ' \ n”,文件名);}}其他mexPrintf(“现有测试文件' % s ' \ n”打开,文件名);
你不能打印使用的64位整数% d
转换说明符。相反,使用FMT64
指定适当的格式为您的平台。FMT64
在头文件中定义吗tmwtypes.h
。下面的例子显示了如何打印一条消息显示一个大文件的大小:
ll int64_T large_offset_example = 9000222000;mexPrintf (FMT64“例大型文件大小:% d个字节。\ n”, large_offset_example);
fseek
和ftell
与64位的功能的ANSI®Cfseek
和ftell
64位文件I / O函数并不是能够在大多数平台上。的函数setFilePos
和getFilePos
然而,被定义为相应的POSIX®fsetpos
和fgetpos
(或fsetpos64
和fgetpos64
)根据您的平台/操作系统。这些函数是64位的文件I / O可以在所有平台上。
下面的例子展示了如何使用setFilePos
而不是fseek
,getFilePos
而不是ftell
。本例使用getFileFstat
找到文件的大小。然后使用setFilePos
寻求结束的文件准备在文件的末尾添加数据。
请注意
虽然抵消
参数setFilePos
和getFilePos
是一个指针指向一个签署了64位整数,int64_T
,它必须投一个fpos_T *
。的fpos_T
中定义的类型是io64.h
作为适当的fpos64_t
或fpos_t
根据你的操作系统平台。
getFileFstat (fileno (fp) &statbuf);文件大小= statbuf.st_size;抵消=文件大小;setFilePos (fp (fpos_T *)抵消);getFilePos (fp (fpos_T *)和地位);
不像fseek
,setFilePos
金宝app只支持绝对寻求相对于文件的开始。如果你想做一个相对的寻求,首先调用getFileFstat
获取文件大小。然后将相对偏移量转换为绝对抵消你能通过setFilePos
。
得到一个打开文件的大小:
刷新文件大小的记录存储在内存使用getFilePos
和setFilePos
。
使用检索文件的大小getFileFstat
。
之前试图检索一个打开的文件的大小,首先刷新的记录文件大小驻留在内存中。如果你跳过这一步打开写一个文件,文件大小可能不正确或返回0。
刷新文件大小记录,寻求任何抵消在文件中使用setFilePos
。如果你不想改变文件指针的位置,你可以寻求文件中的当前位置。本例中获取当前文件的抵消从一开始。然后寻求当前位置更新文件大小不移动文件指针。
getFilePos (fp (fpos_T *)和地位);setFilePos (fp (fpos_T *)和地位);
的getFileFstat
函数接受一个文件描述符的输入参数。使用fileno
函数打开文件的文件指针。getFileFstat
返回文件的大小,以字节为单位st_size
一个领域structStat
结构。
structStat statbuf;int64_T文件大小= 0;如果(0 = = getFileFstat (fileno (fp) &statbuf)){文件大小= statbuf.st_size;mexPrintf(“文件大小是%”FMT64“\ n d字节”,文件大小);}
的getFileStat
函数接受一个封闭的文件的文件名作为输入参数。getFileStat
返回文件的大小,以字节为单位st_size
一个领域structStat
结构。
structStat statbuf;int64_T文件大小= 0;如果(0 = = getFileStat(文件名,&statbuf)){文件大小= statbuf.st_size;mexPrintf(“文件大小是%”FMT64“\ n d字节”,文件大小);}