加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VC FILE总结

(2011-06-30 07:09:12)
标签:

杂谈

分类: Cplusplus

FILE *fopen( const char *filename, const char *mode );
打开一个文件
返回值: 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。

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


size_t fwrite(const void*buffer,size_t size,size_t count,FILE*stream);   返回值:返回实际写入的数据块数目   
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。   
(2)size:要写入内容的单字节数;   
(3)count:要进行写入size字节的数据项的个数;   
(4)stream:目标文件指针。
向文件读入写入一个数据块 


原型:int fflush(FILE *stream)
函数名: fflush   
功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件   
 

int fseek(FILE *stream, long offset, int fromwhere);
重定位流(数据流/文件)上的文件内部位置指针   
注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。
编辑本段用法

函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。
如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

 

void *memset(void *s, int ch, unsigned n);
用指定字符来设定一个Buffer
第一参数:那一块Buffer
第二参数:字符
第三参数:字符数目
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。

ssize_t read(int fd,void * buf ,size_t count);
read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。

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


ftell(fp);利用函数 ftell() 也能方便地知道一个文件的长。如以下语句序列: fseek(fp, 0L,SEEK_END); len =ftell(fp); 首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。

函数名: rewind   
功 能: 将文件内部的位置指针重新指向一个流(数据流/文件)的开头


void CFileView::OnFileWrite()
{
 // TODO: Add your command handler code here
 FILE *pFile=fopen("1.txt","w");
 fwrite("CDQ IS A CDQ",1,strlen("CDQ IS A CDQ"),pFile);
        fseek(pFile,0,SEEK_SET);
 fwrite("2009",1,strlen("2009"),pFile);
        fclose(pFile);
 //fflush(pFile);

}

void CFileView::OnFileRead()
{
 // TODO: Add your command handler code here
 FILE *pFile=fopen("1.txt","r");
// char ch[100];
// memset(ch,0,100);
// fread(ch,1,100,pFile);
// MessageBox(ch);

    char *pBuf;
 fseek(pFile,0,SEEK_END);//已经设置到尾部了
 int len = ftell(pFile);
 pBuf=new char[len+1];//长度/0
 rewind(pFile);
 fread(pBuf,1,len,pFile);//是从最后一个的 下一个位置进行读取
 pBuf[len]=0;
 MessageBox(pBuf);

 fclose(pFile);
}

//////////////////
#include <fstream.h>
 
void CFileView::OnFileWrite()
     
         ofstream ofs("4.txt");
  ofs.write("CDQ",strlen("CDA"));
  ofs.close();
}

void CFileView::OnFileRead()
{
         ifstream ifs("4.txt");
  char ch[100];
  memset(ch,0,100);
  ifs.read(ch,100);
  ifs.close();
  MessageBox(ch);
}

//////////////////

CreateFile函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。
 文件
 pipes
 邮槽
 通信资源
 磁盘驱动器(仅适用于windowsNT)
 控制台
 文件夹(仅用于打开)

HANDLE CreateFile(
 LPCTSTR lpFileName,    //指向文件名的指针
 DWORD dwDesiredAccess,    //访问模式(写/读)
 DWORD dwShareMode,    //共享模式
 LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
 DWORD dwCreationDisposition,   //如何创建
 DWORD dwFlagsAndAttributes,   //文件属性
 HANDLE hTemplateFile    //用于复制文件句柄
);

 

void CFileView::OnFileWrite()
      HANDLE hFile;
 hFile=CreateFile("5.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,
  FILE_ATTRIBUTE_NORMAL,NULL);
 DWORD dwWrites;
 WriteFile(hFile,"CDQ",strlen("CDQ"),&dwWrites,NULL);
 CloseHandle(hFile);
}


void CFileView::OnFileRead()
{
         HANDLE hFile;
  hFile=CreateFile("5.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL,NULL);
  char ch[100];
  DWORD dwReads;
  ReadFile(hFile,ch,100,&dwReads,NULL);
  ch[dwReads]=0;
  CloseHandle(hFile);
         MessageBox(ch);


}

 

/////////////////////////
CFile是MFC文件类的基类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。CFile与CArchive类共同使用,支持MFC对象的串行化。该类与其派生类的层次关系让程序通过多形CFile接口操作所有文件对象。例如,一个内存文件相当一个磁盘文件。使用CFile及其派生类进行一般目的的磁盘I/O,使用ofstream或其它Microsoft输入输出流类将格式化文本送到磁盘文件。通常,一个磁盘文件在CFile构造时自动打开并在析构时关闭。静态成员函数使你可以在不打开文件的情况下检查文件状态。

CFile是MFC文件类的基类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。CFile与CArchive类共同使用,支持MFC对象的串行化。   
该类与其派生类的层次关系让程序通过多形CFile接口操作所有文件对象。例如,一个内存文件相当一个磁盘文件。   
使用CFile及其派生类进行一般目的的磁盘I/O,使用ofstream或其它Microsoft输入输出流类将格式化文本送到磁盘文件。   
通常,一个磁盘文件在CFile构造时自动打开并在析构时关闭。静态成员函数使你可以在不打开文件的情况下检查文件状态。   
#include <afx.h>


void CFileView::OnFileWrite()
{
  CFile file("6.txt",CFile::modeCreate | CFile::modeWrite);
  file.Write("CDQ",strlen("CDQ"));
  file.Close();
}
void CFileView::OnFileRead()
{
  CFile file("6.txt",CFile::modeRead);
  char *pBuf;
  DWORD dwFileLen;
  dwFileLen = file.GetLength();//得到文件长度
  pBuf=new char[dwFileLen+1];
  pBuf[dwFileLen]=0;
  file.Read(pBuf,dwFileLen);
  file.Close();
  MessageBox(pBuf);
}

/////////////////

CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。   可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。每种情况下,对话框都与标准MFC对话框一样工作。因为它们都是CCommonDialog类的派生类。

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 为父窗口指针。

创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择: CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\ est\ est1.txt   
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt
   
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt   CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1   

POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。

 

 

 

 

GetPathName返回文件路径(盘符+路径+文件名) ?,然后用_splitpath()进行分割,可以直接分割为盘符\路径\文件名\扩展名,我们一般是通过GetPathName()返回的结果解析出路径来。
GetPathName返回文件路径(盘符+路径+文件名)

void CFileView::OnFileWrite()
{
    CFileDialog fileDlg(FALSE);
    fileDlg.m_ofn.lpstrTitle="我的文件保存对话框";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
    fileDlg.m_ofn.lpstrDefExt="txt";
    if(IDOK==fileDlg.DoModal())
    {
    CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
    file.Write("CDQ",strlen("CDQ"));
    file.Close();
    }
}

void CFileView::OnFileRead()
{
    CFileDialog fileDlg(TRUE);//TRUE为打开对话框
    fileDlg.m_ofn.lpstrTitle="我的文件保存对话框";
    fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
    if(IDOK==fileDlg.DoModal())
   {
     CFile file(fileDlg.GetFileName(),CFile::modeRead);
     char *pBuf;
     DWORD dwFileLen;
     dwFileLen = file.GetLength();//得到文件长度
     pBuf=new char[dwFileLen+1];
     pBuf[dwFileLen]=0;
     file.Read(pBuf,dwFileLen);
     file.Close();
     MessageBox(pBuf);
   }
}

//////////
WriteProfileString 函数提供了一种机制来维护系统配置文件 WIN.INI。在以前的版本中的 Windows 版本 3.0,应用程序可能调用 WriteProfileString 函数可将项添加到 WIN.INI 或修改现有的条目。但是,要从 WIN.INI 中删除条目,用户需要手动编辑该文件。

WriteProfileString 函数已扩展在 Windows 3.0 中启用的应用程序从 WIN.INI 中删除下列任一操作:


1与密钥名称关联的值。
2包含特定的键名的行。
3向整个内容。

 

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有