文件操作知识点摘记

对于文件操作,主要知识点经验总结如下。另外需注意C语言,C++语言对文件操作的不同规定及兼容性。


1.const char*, char*const的区别.看*和const谁离右边的定义指针名最近,*离得近的话表示该指针指向一个常量字符串,不能通过该指针改变字符串的内容;const离得近的话表示这是一个常量指针,指针指向的位置一开始就确定,不能改变。



2.file结构体。

struct   _iobuf   { 
         char   *_ptr;                  //文件输入的下一个位置 
         int       _cnt;                //当前缓冲区的相对位置 
         char   *_base;                 //指基础位置(应该是文件的其始位置) 
         int       _flag;               //文件标志 
         int       _file;              //文件的有效性验证 
         int       _charbuf;           //检查缓冲区状况,如果无缓冲区则不读取 
         int       _bufsiz;            //文件的大小 
         char   *_tmpfname;            //临时文件名 
}; 
typedef   struct   _iobuf   FILE;



3.fopen函数。

函数原型:FILE * fopen(const char * path,const char * mode);

返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。

参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。


4.fwrite是C语言函数,指向文件写入一个数据块。

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的 数据块数目
(1)buffer:是一个 指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的 数据项的个数;
(4)stream:目标 文件指针
(5)返回实际写入的数据项个数count。


5.fclose()函数就可以把 缓冲区内最后剩余的数据输出到内核缓冲区,并释放 文件指针和有关的缓冲区。
函数原型:int fclose( FILE *fp );
返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)


6.fflush()函数冲洗流中的信息,该函数通常用于处理磁盘文件。


7.fseek函数。 重定位流( 数据流/文件)上的文件内部位置 指针
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offset( 指针 偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。



8.fread函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型
size_t fread ( void * buffer , size_t size , size_t count , FILE * stream ) ;

参 数

buffer
用于接收数据的 内存地址
size
要读的每个数据项的字节数,单位是 字节
count
要读count个数据项,每个数据项size个字节.
stream
输入流

返回值

实际读取的元素个数。如果返回值与 count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。  


9.memset函数将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的 ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的 指针
void *memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的 结构体数组进行清零操作的一种最快方法 [1]  


10. ftell函数用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。
long ftell(FILE *stream);
使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。


11.函数名: rewind()将文件内部的指针重新指向一个流的开头。
rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_SET); [1]  
用 法: void rewind(FILE *stream);


12.itoa()与数字字符的关系,及48ASCII规则。



13.ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;
构造函数:ofstream(const char* szName,int nMode=ios::out,int nProt=filebut::openprot);
成员函数包括ofs.write, ofs.close(),

其头文件为fstream.h.



14.CreateFile函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
函数声明HANDLE CreateFile(LPCTSTR lpFileName, //普通文件名或者设备文件名
DWORD dwDesiredAccess, //访问模式(写/读)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile //用于复制文件句柄
);
参数说明:
lpFileName String要打开的文件的名或设备名。这个字符串的最大长度在ANSI版本中为MAX_PATH,在unicode版本中为32767。
dwDesiredAccess指定类型的访问对象。如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息 。
dwShareModeLong, 如果是零表示不共享; 如果是FILE_SHARE_DELETE表示随后打开操作对象会成功只要删除访问请求;如果是FILE_SHARE_READ随后打开操作对象会成功只有请求读访问;如果是FILE_SHARE_WRITE 随后打开操作对象会成功只有请求写访问。
lpSecurityAttributesSECURITY_ATTRIBUTES, 指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)
dwCreationDispositionLong,下述常数之一:

dwFlagsAndAttributesLong, 一个或多个下述常数

hTemplateFile,hTemplateFile为一个文件或设备句柄,表示按这个参数给出的句柄为模板创建文件(就是将该句柄文件拷贝到 lpFileName指定的路径,然后再打开)。它将指定该文件的属性扩展到新创建的文件上面,这个参数可用于将某个新文件的属性设置成与现有文件一样,并且这样会忽略dwAttrsAndFlags。通常这个参数设置为NULL,为空表示不使用模板,一般为空。

如执行成功,则返回文件句柄。


15.WriteFile 函数。将数据写入一个文件。该函数比fwrite函数要灵活的多。也可将这个函数应用于对通信设备、管道、 套接字以及邮槽的处理。
BOOL  WriteFile(
HANDLE   hFile, //文件句柄
LPCVOID  lpBuffer, //数据缓存区指针
DWORD    nNumberOfBytesToWrite, //你要写的字节数
LPDWORD  lpNumberOfBytesWritten, //用于保存实际写入字节数的存储区域的指针
LPOVERLAPPED lpOverlapped //OVERLAPPED结构体指针
);
vc返回值
调用成功,返回非0
调用不成功,返回为0


16.ReadFile函数。从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作,

BOOL  ReadFile(
     HANDLE  hFile,                                     //文件的句柄
     LPVOID  lpBuffer,                                 //用于保存读入数据的一个缓冲区
     DWORD  nNumberOfBytesToRead,     //要读入的字节数
     LPDWORD  lpNumberOfBytesRead,     //指向实际读取字节数的指针
     LPOVERLAPPED lpOverlapped
     //如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。
     //该结构定义了一次异步读取操作。否则,应将这个参数设为NULL
);


17.CFile是 MFC文件类的 基类,它直接提供非缓冲的二进制磁盘输入/ 输出设备,并直接地通过 派生类支持文本文件和内存文件。MFC的类CFileDialog用于实现这种功能。
CFile与CArchive类共同使用,支持MFC对象的 串行化。该类与其派生类的层次关系让程序通过多形CFile接口操作所有文件对象。
使用CFile及其派生类进行一般目的的磁盘I/O,使用ofstream或其它Microsoft输入输出流类将格式化文本送到磁盘文件。
通常,一个磁盘文件在CFile构造时自动打开并在析构时关闭。静态成员函数使你可以在不打开文件的情况下检查文件状态。
用前包含头文件  #include <afx.h>
CFile(LPCTSTR lpszFileName, UINT nOpenFlags);
第一个参数为指定文件的名字,第二个参数为指定文件共享和访问的方式。

数据成员
m_hFile 常包含操作系统文件句柄

构造函数

CFile 从一个路径或文件句柄构造一个CFile对象;
Abort 不管任何警告和错误,关闭一个文件;
Duplicate 构造一个基于该文件的副本;
Open 带错误检验选项,安全打开一个文件;
Close 关闭文件,删除对象。

输入/输出

Read 从文件的当前位置读数据;
ReadHuge 可从文件的当前位置读取大于64K数据,在32位编程中废弃了,见Read;
Write 将文件数据写入 当前文件位置;
WriteHuge 可将文件的大于64K数据写到当前文件位置,在32位编程中废弃了,见Write;
Flush 溢去未被写入的任何数据。

定位

Seek 定位于当前文件指针;
SeekToBegin 定位当前文件指针到文件开头;
SeekToEnd 定位当前文件指针到文件尾;
GetLength 获取文件长度;
SetLength 改变文件长度。

封锁

LockRange 在文件中封锁一定范围内的字节;
UnlockRange 解锁一定范围内的字节。

状态

GetPosition 获取当前文件指针;
GetStatus 获取打开文件的状态;
GetFileName 获取被选文件的文件名;
GetFileTitle 获取被选文件的标题;
GetFilePath 获取被选文件的完整路径;
SetFilePath 设置被选文件的完整路径

静态

Rename 改名指定文件( 静态函数);
Remove 删除指定文件(静态函数);
GetStatus 获取指定文件的状态(静态,虚函数); //注,此处错误:静态函数不会是虚函数了。
SetStatus 设置指定文件的状态(静态,虚函数) //同上


18.CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
CFileDialog::CFileDialog
(
BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL
);
bOpenFileDialog
TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。
  lpszDefExt
指定默认的文件扩展名。
  lpszFileName
指定默认的文件名。
  dwFlags
指明一些特定风格。
  lpszFilter
是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。
pParentWnd
为父窗口指针。

构造函数
CFileDialog构造一个CFileDialog对象操作
DoModal显示对话框并使用户可以进行选择
GetPathName返回选定文件的完整路径
GetFileName返回选定文件的文件名
GetFileExt返回选定文件的扩展文件名
GetFileTitle返回选定文件的标题
GetNextPathName返回下一个选定文件的完整路径
GetReadOnlyPref返回选定文件的只读状态
GetStartPosition返回文件名列表的第一个元素位置



19.win.ini,是Windows系统的一个基本系统配置文件。WIN.INI文件包含若干小节,每一节由一组相关的设定组成。文件配保存了诸如影响Windows操作环境的部分、控制系统界面显示形式及窗口和鼠标器的位置、联结特定的文件类型与相应的应用程序、列出有关HELP窗口及对话窗的默认尺寸、布局、文本颜色设置等等的选项。是系统配置不可缺少的文件。

WIN.INI文件包含若干小节,每一节由一组相关的设定组成。WIN.INI文件中小节和设定的格式如下:
[小节名]
关键字名=值
其中:小节名必须用中括号([])括起,且左括号必须在屏幕的最左一列,文件中可以包含注释,每一行注释以分号(;)开始。
WIN.INI中的主要小节名及含义如下:
[Windows]:影响Windows操作环境的部分,包括在启动Windows时执行哪一个应用程序,警告声音的设置、窗口边框的宽度、键盘响应的速度、鼠标器设置以及将文件定义为文档或程序等。
[Desktop]:控制系统界面显示形式及窗口和鼠标器的位置。
[Extensions]:联结特定的文件类型与相应的应用程序。
[Intl]:描述怎样为除美国外的其它国家显示有关的文件项目。
[Windows Help]:列出有关HELP窗口及对话窗的默认尺寸、布局、文本颜色等设置。
[Font Substitue]:列出Windows可识别的互换字体。
[TureType]:使用和显示 TrueType字体的可选设置。
[Sounds]:为每个系统事件设计的声音文件列表。
[MCI Extensions]:把MEDIA控制接口设备同特定文件类型联系起来。
[Compatibility]:用于解决Windows 98和Windows 3.x之间的差异所引起的兼容性问题。
[Compatibility32]:用于解决Windows 98和Windows 3.X之间的差异所引起的32位磁盘存取兼容性问题。
[MCI Compatibility]:用于Windows 98中文版的MCI设备兼容性问题。
[Module Compatibility]:用于Windows 98中文版的模块兼容性问题。
[IME Compatibility]:用于Windows 98中文版的输入法与应用程序的兼容性问题。
[Pscript.Drv]:描述PostScrip打印机的ATM字库状况。
[Fonts]:描述Windows装入的屏幕字体文件。
Embedding:列出目标联接与嵌入(OLE)使用的服务器目标。
[Colors]:定义Windows的显示颜色。
[PrinterPorts]:Windows将要访问的激活或非激活的输出设备。
[Ports]:描述中文Windows 98的可用端口。
[Mail]:描述Microsoft Mail以及Microsoft Exchange的使用参数。
[Devices]:与旧版本Windows的应用程序兼容的激活输出设备。
[Programs]:当用户打开多个数据文件时,该段可为Windows查找相应程序文件提供附加的路径。
[Associated CharSet]:描述Windows 98中文版使用字符集状态和西文字体所对应的缺省中文字体。
[Windows Telephony]:描述Windows 98中文版的Microsoft Exchange的电话号码初始化日期和时间。
[Paintbrush]:描述Windows 98中文版的“画图”(PaintBrush)的省略图片格式。
[MAPI 1.0 Time Zone]:描述MAPI 1.0的时区设置参数.


20.writeprofilestring()。在Win.ini初始化文件指定小节内设置一个字串。 把信息写入系统的win.ini文件。
BOOL WriteProfileString(
      LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串
      LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节
      LPCTSTR lpString       // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键
)


把信息写入自己定义的.ini文件
BOOL WritePrivateProfileString(
      LPCTSTR lpAppName,      // 同上
      LPCTSTR lpKeyName,      // 同上
      LPCTSTR lpString,       // 同上
      LPCTSTR lpFileName      // 要写入的文件的文件名。若该ini文件与程序在同一个目录下,也可使用相对
            //路径,否则需要给出绝度路径。
)


21.从系统的win.ini文件中读取信息

DWORD GetProfileString(
      LPCTSTR lpAppName,            // 节名
      LPCTSTR lpKeyName,            // 键名,读取该键的值
      LPCTSTR lpDefault,            // 若指定的键不存在,该值作为读取的默认值
      LPTSTR lpReturnedString,      // 一个指向缓冲区的指针,接收读取的字符串
      DWORD nSize                   // 指定lpReturnedString指向的缓冲区的大小
)



22.RegCreateKey 。创建或打开注册表项。默认为创建,当注册表中有此项时。为打开。

LONG  RegCreateKey(
  HKEY hKey,
LPCTSTR lpSubKey,
  PHKEY phkResult
);

hKey  指向当前打开表项的句柄,或者是下列预定义保留句柄值之一,实际上就是注册表中的几个分支。

lpSubKey  指向一个空终止的字符串指针,指示这个函数将打开或创建的表项的名称。这个表项必须是由hKey参数所标识的项的子项.

phkResult  这是一个返回值,指向一个变量的指针,用来接受创建或打开的表项的句柄。当不再需要此返回的注册表项句柄时,调用RegCloseKey函数关闭这个句柄。



23.RegOpenKey.打开一个现有的注册表项.

LONG RegOpenKey(
  HKEY hKey, // 要打开键的句柄
LPCTSTR lpSubKey, // 要打开子键的名字的地址
PHKEY phkResult // 要打开键的句柄的地址);
);



24.RegSetValue设置指定项或子项的默认值 .

LONG RegSetValue(
    HKEY hKey,
  LPCTSTR lpSubKey,
     DWORD dwType,
    LPCTSTR lpData,
    DWORD cbData
  );

hKey
指向当前打开表项的句柄,或者预定保留值之一( 注册表中默认的几大 注册表项
lpSubKey
指向一个空终止的字符串指针,指示这个函数将打开或创建表项的名称。可以为NULL,或 空字符串,那么此函数将为参数hkey所指定的注册表项默认设置值。这个表项必须是由hkey参数所标识的子项。
dwType
指示将被存储的信息类型。该参数必须为REG_SZ
lpData
指向一个空终止的字符串,该字符串中包含了 要为指定项的默认值设置的数据
cbData
指示lpData参数所指向的字符串的大小,单位是字节,但不包含字符串最后的空终止字符


25.RegQueryValue函数.取得指定项或子项的默认(未命名)值.









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值