文件操作的一些知识点

来源:互联网 发布:新网域名绑定空间 编辑:程序博客网 时间:2024/05/16 09:26

一.基本文件操作
char ch[5]="lisi";
const char*pStr=ch;            指向常量的指针
char const *pStr=ch  和上面的效果是一样的

*pStr='w';//ERROR  指针的内容不可变
pStr="sd";//RIGHT  指针的值可以修改

char * const pStr=ch;          指向指针的常量
  
 *pStr='w';//ERROR  指针的内容可变
pStr="sd";//RIGHT  指针的值可以不可变

fwrite
fopen
fflush----》清空缓存,将缓存的内容进行存储

fseek

fread

ftell得到文件指针当前的位置
rewind 重新放置文件指针到文件开始处

文件是在计算机内存中以二进制表示的数据,在外部存储介质上的另一种存放形式。

文件分为
二进制文件---》包含在ASCII及扩展ASCII字符中编写的数据或程序指令的文件,一般是可执行程序
文本文件、图形、图像、声音等等文件。
而以二进制方式往文件中写入数据,则将数据在内存中的存储形式原样输出

 

文本文件也
称为ascii文件---》它的每一个字节存放的是可表示为一个字符的ASCII代码的文件。
是以行为基本结构的一种信息组织和存储方式的文件,可用任何文字处理程序阅读的简单文本文件
当我们按照文本方式往文件中写入数据时,一旦遇到换行字符(ASCII为10),则会转换为回车-换行
(ASCII为13,10)。在读取文件时,一旦遇到回车-换行的组合(即连续的ASCII13、10),则会
转换为换行字符(ASCII为10)

0的ASCII为48

int i =89343;
char ch[5];
1.itoa(i,ch,10);---->将整形转为字符集的方式
2.ch[0]=48+8;
ch[1]=48+9;
ch[2]=48+3;
ch[3]=48+4;
ch[4]=48+3;--->第二种存储方式,不将以上转换,所存储的是只是对于ascii码的字符,并非我们所想要的

fwrite(ch,1,5,pFile);
fclose(pFile);


ofstream 需要包含<fstream.h>
ifstream
CreateFile
WriteFile
CloseHandle 关闭handle

CFileDialog如何用?
CFile
CFileDialog
文件过滤类型="Text Files(*.txt)/0*.txt/All Files(*.*) /0*.*/0/0";

 CFileDialog fileDlg(TRUE);---->为true的时候是文件打开对话框
                                       为false是文件保存对话框
 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 只兼容16位和cwinapp里同样的函数区别是在各种操作系统的时候,存放的地方不一样
GetProfileString

CString str;
str.GetBuffer();---->将返回一个LPTSTR类型的参数

怎样操作注册表?
RegCreateKey
HKEY hey;
RegCreateKey(HKEY_LOCAL_MACHINE,"Software//http://www.sd.df//admin",&hey);--->在注册表下建立一项
RegSetVlaue(hey,NULL,REG_SZ,"zhangsan"),strlen("zhangsan"));----》设定项值 也可以用RegSetVlaueEx设定其他类型的值
RegCloseKey(hey);---》关闭项

LONG lvalue;
RegQueryValue(HKEY_LOCAL_MACHINE,"Software//http://www.sd.df//admin",NULL,&lvalue);--->读取注册表下某一项的值空间
char *pBuf=new char[lvalue];-------》根据空间建立缓冲区
RegQueryValue(HKEY_LOCAL_MACHINE,"Software//http://www.sd.df//admin",pBuf,&lvalue);----》填充缓冲
MessageBox(pBuf);获得值


RegDeleteKey


如何VC字符四则运算?
 char charlist[30];
 for (int i=0;i<25;i++)
 {
      charlist[i]=(char)('z'-i);
 }--------------------------》得到的charlist将是zyxwvutsrqponmlkjihgfedcb内部自动进ASCII码制的转换进行运算


vc怎么样将字符串赋给字符数组?
strm[100];
strcpy(strm,str);

 

二.文档的串行化

允许你保存一个对象网络在一个永久的二进制形式上(通常是磁盘存储器)
在一个对象删除后,保持持久性,以后你可以在持久存储器上加载这一对象,
在内存中重新构建他们使数据持久性的过程叫串行化

CArchive的应用?
写入数据: 
CFile file("1.txt",CFile::modeCreate|CFile::modeWrite);
 CArchive ar(&file,CArchive::store);
 int i=4;
 ar<<i;

读取数据:
 CFile file("1.txt", CFile::modeRead);
 CArchive ar(&file,CArchive::load);
 int i=4;
 ar>>i;
 CString s;
 s.Format ("%d",i);
 MessageBox(s);

如何修改文档标题?
1.在CDoc中OnNewDocument()内SetTitle("我是标题");
2.在String Table里有个IDR_MANFRAME
CDocTemplate::GetDocString专门获取IDR_MANFRAME,
IDR_MANFRAME的含义
1)CDocTemplate::windowTitle,主窗口标题栏上的字符串,MDI程序不需要指定,将以IDR_MAINFRAME字符串为默认值。
2)CDocTemplate::docName,缺省文档的名称。如果没有指定,缺省文档的名称是无标题。,当你点击保存按钮时显示的默认文件名称
(3)CDocTemplate::fileNewName,文档类型的名称。如果应用程序支持多种类型的文档,此字符串将显示在"File/New"对话框中。如果没有指定,就不能够在"File/New"对话框处理这种文件


(4)CDocTemplate::filterName,文档类型的描述和一个适用于此类型的通配符过滤器。这个字符串将出现在“File/Open”对话框中的文件类型列表框中。要和CDocTemplate::filterExt一

起使用。
(5)CDocTemplate::filterExt,文档的扩展名。如果没有指定,就不能够在“File/Open”对话框中处理这种文档。要和CDocTemplate::filterName一起使用。
(6)CDocTemplate::regFileTypeId,如果你以::RegisterShellFileTypes向系统的注册表注册文件类型,此值会出现在HEY_CLASSES_ROOT之下成为其子项,并仅供Windows内部使用。如果没

有指定,这种文件类型就无法注册。
(7)CDocTemplate::regFileTypeName,这也是存储在注册表中的文件类型名称。它会显示于程序中用以访问注册表的对话框内。

如何串行化一个类?
1.类派生自: public CObject
2.在类里添加一个宏DECLARE_SERIAL(类名)
3.有个无参数的构造函数
4.类里声明重载方法void Serialize( CArchive& archive );
5.类里在无参的构造函数前添加IMPLEMENT_SERIAL(类名, 基类名称, 版本号 )保存和读取时版本号必须相同一个文档类对象能和多个视类对象相关,一个视类对象只和一个文档类对象相关.

并且在CPP里实现方法
void CGraph::Serialize(CArchive& ar)
{
 if(ar.IsStoring())
 {
  ar<<m_nDrawType<<m_ptOrigin<<m_ptEnd;
 }
 else
 {
  ar>>m_nDrawType>>m_ptOrigin>>m_ptEnd;
 }
}

 

 

 

原创粉丝点击