文件操作


一、应用C函数进行文件操作


1.fopen

该函数用于打开一个文件
FILE *fopen(const char* filename,const char* mode)
filename:打开的文件名称
mode:文件打开模式

2.fclose

该函数用于关闭打开的文件
int fclose(FILE*stream)
stream:之前打开的文件指针

3.fflush

该函数用于清理文件缓冲区
int fflush(FILE* stream)

4.fread

该函数从文件中读取数据
size_t fread(void* buffer,size_t size,size_t count,FILE* stream)
buffer:存储数据的缓冲区
size:读取数据单位的大小
count:读取的单位数量
stream:之前打开的文件指针
返回值:函数返回实际读取的单位数量

5.fwrite

该函数用于向文件中写入数据
size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream)
buffer:被写入数据的缓冲区
size:写入数据单位的大小
count:写入数据的最大单位数量
stream:之前打开的文件指针
返回值:函数返回实际写入的单位数量6.

6.fgetc

函数从文件中读取一个字符
int fgetc(FILE* stream)
stream:打开的文件指针
返回值:函数返回一个以整数值表示的字符

7.fputc

该函数用于向文件中写入一个字符
int fputc(int c,FILE* stream)
c:以整数表示被写入的字符
stream:之前打开的文件指针

8.feof

该函数用于判断文件是否达到文件尾
int feof(FILE* stream)
返回值:如果文件指针到达了文件尾,函数返回非零值,否则返回0

9.fseek

该函数用于将文件指针设置在指定的位置
int fseek(FILE* stream,long offset,int origin)
stream:之前打开的文件指针
offset:基于origin位置偏移的数量
origin:初始位置,函数将从该点开始移动文件指针,为SEEK_CUR表示当前位置,为SEEK_END,表示文件尾,为SEEK_SET,表示文件开始位置


写入:
FILE *pFile = fopen("demo.txt","w+t");
 if (pFile)
 {
  char *pchData = "谁动了我的小熊";
  fwrite(pchData,sizeof(char),strlen(pchData),pFile);
  fclose(pFile);
 }


读取:
FILE *pFile = fopen("demo.txt","r");
 if (pFile)
 {
  char pchData[MAX_PATH] = {0};
  fread(pchData,sizeof(char),MAX_PATH,pFile);
  fclose(pFile);
  MessageBox(pchData,"提示");
 }  


二、使用CFile类进行文件操作


1.open

该方法用于打开一个文件
virtual BOOL Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFlleException* pError=NULL);
lpszFileName:要打开的文件名,可以包含完整路径,也可以是相对的文件名
nOpenFlags:文件打开标记
CFile::modeCreate 直接构造去创建一个新的文件如果这个文件存在,则删除这个文件里所有内容
CFile::modeNoTruncate 联合创建属性,如果这个文件已创建,则不删除原文件内容,因而这个文件是可以当做一个已经存在,或者不存在而被新建的文件来保证打开。这是非常有意义的,例如,打开来设置一个存在或者不存在的文件都是可以的。这个属性对于CStdioFile也是非常好的
CFile::modeRead 打开为只读属性.
CFile::modeWrite 打开为只写属性.
CFile::modeReadWrite 打开为读写属性.
CFile::modeNoInherit 防止这个文件来源于子进程.
CFile::shareDenyNone 在这个文件读写处理之外打开这个文件
CFile::shareDenyRead 以独占方式打开,拒绝其他读操作
CFile::shareDenyWrite 以独占方式打开,拒绝其他写操作
CFile::shareExclusive 以独占方式打开文件,拒绝其他读写操作访问这个文件Opens the file with exclusive mode, denying other 如果这个文件已打开进行读写操作则构造失败
CFile::shareCompat 这个属性在 32 bit MFC是不可用的. This flag maps to CFile::shareExclusive 当应用在CFile::Open.
CFile::typeText 设置文本模式特别处理回车换行 (used in derived classes only).
CFile::typeBinary 设置二进制模式(used in derived classes only).

2.open

该方法用于关闭打开的文件
virtual void Close();

3.Read

该方法用于从文件中读取数据到缓冲区中
virtual UINT Read(void *lpBuf,UINT nCount);
lpBuf:接收数据的缓冲区
nCount:从文件中读取数据的最大数量
返回值:函数返回实际读取的字节数

4.ReadHuge

该方法从文件中读取数据到缓冲区,主要用于大文件的读取
DWORD ReadHuge(void *lpBuffer,DWORD dwCount);
lpBuffer:接收数据的缓冲区
dwCount:从文件中读取数据的最大数量
返回值:函数返回实际读取的字节数

5.write

该方法用于从缓冲区写入数据到文件中
virtual void Write(const void* lpBuf,UINT nCount);
lpBuf:表示待写入数据的缓冲区
nCount:表示向文件中写入数据的数量

6.writeHuge

该方法用于从缓冲区写入数据到文件中,主要用于大文件的写入
 void WriteHuge(const void* lpBuf,DWORD dwCount);
lpBuf:表示待写入数据的缓冲区
dwCount:表示向文件中写入数据的数量

7.flush

该方法将文件缓冲区中的数据强制写入文件中
virtual void flush();

8.seek

该方法用于重新设置文件指针的位置
virtual ULONGLONG Seek(LONGLONG lOff,UINT nFrom);
lOff:文件指针移动的字节数
nFrom:指针移动的起点。为CFile::begin,表示从文件头开始,把指针向后移动IOff字节;为CFile::current,表示从当前位置开始,把指针
向后移动lOff字节;为CFile::end,表示从文件尾开始,把指针向前移动iOff字节。

9.LockRange

该方法用于锁定文件中指定区域中的数据,,这样可以阻止其他进程对该区域数据的访问
virtual void LockRange(DWORD dwPos,DWORD dwCount);
dwPos:从开始字节到被封锁的字节的偏移量
dwCount:封锁的字节数

10.UnlockRange

该方法用于解锁文件中指定区域的数据,以允许其他进程对该区域数据的访问
virtual void UnlockRange(ULONGLONG dwPos,ULONGLONG dwCount);
dwPos:从开始字节到被解锁的字节的偏移量
dwCount:解锁的字节数

11.Rename

该方法用于对文件进行重命名
static void PASCAL Rename(LPCTSTR lpszOldName,lpszNewName);
lpszOldName:原文件名
lpszNewName:新文件名

12.GetStatus

该方法用于获取文件的状态
rStatus是指文件状态对象,其类型是CFileStatus.CFileStatus是一个存储状态信息的数据结构。
BOOL GetStatus(CFileStatus& rStatus)const;
  static BOOL PASCAL GetStatus(LPCSTR lpszFileName, CFileStatus& rStatus);
  返回值:如果指定文件的状态信息成功获取,则为TRUE,否则为FALSE。
  参数:
rStatus
用户提供的CFileStatus结构的参考,用来接收状态信息。CFileStatus结构有以下字段:
·CTime m_ctime文件创建的时间。
·CTime m_mtime文件最后一次修改的时间。
·CTime m_atime最后一次访问文件并读取的时间。
·LONGm_size文件逻辑长度,以字节数表示,如同DIR命令报告的那样。
·BYTEm_attribute文件属性字节。
·Charm_szFullName[_MAX_PATH]Windows字符集表示的全文件名。
lpszFileName
Windows字符集表示的文件路径,此路径可为绝对的或为相对的,但不包含网络名。

13.SetStatus

该方法用于设置文件的状态
static void SetStatus(LPCTSTR lpszFileName,const CFileStatus&status);
lpszFileName:文件的名称。可以是绝对的也可以是相对的,但不能是网络路径
status:CFileStatus结构指针,表示设置的文件状态

14.GetLenth

该方法用于获取文件的长度
virtual ULONGLONG GetLength() const;

::OnWrite()
{
CFile file;//定义一个文件对象
file.Open("demo.txt",CFlie::modeCreate|CFile::modeReadWrite);//创建文件
file.write("你是谁的小可爱",18);//向文件中写入数据
file.Close();//关闭文件
}

::OnRead()
{
CFile file;//定义文件对象
file.open("demo.txt",CFile::modeRead);//以读的方式代开
unsigned char pchData[MAX_PATH]={0};//定义数据缓冲区
file.Read(pchData,MAX_PATH);//读取数据到缓冲区
CFileStartus flStatus;//定义文件状态
file.Getstatus(flStatus);//获取文件状态
file.close();//关闭文件
//获取文件创建时间
CString createtime=flStatus.m_ctime.Format("%Y-%m-%d %H:%M:%S");
CString hint="文件内容:";//定义一个字符串
hint+=(char*)pchData;//添加字符串
hint+="\n";//添加换行符
hint+="创建时间:";//添加数据
hint+=createtime;//添加数据
MessageBox(hint,"提示");//弹出提示对话框
CString createtime1 ;
createtime1.Format("%s", flStatus.m_szFullName);//文件绝对路径
MessageBox(createtime1, "提示");
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值