文件的操作
1、指向常量的指针 const char *pstr=ch;//此处不可以修改pstr所指向的值,但是pstr本身的值可以变化;
2、指针常量,char* const pstr,指针本身是常量,不能修改;指向的内容可以修改
字符数组的初始化办法:
(1)char ch[3]={'a','b','c'};
(2)char ch[]={'a','b','c'};
(3)逐个元素初始化;
(4)字符串常量初始化 char ch[]="我的测试数组";
(5)多维数组初始化:char str[4][8]={ "father","mother","brother","sister" };
void CFileView::OnWrite() { FILE *fp=fopen("2.txt","w"); char ch[3]={'a',10,'b'};//此处写入的是三个字节,但是协同会在’a‘和10之间添加一个字节,也就是说此文件是4个字节的内容 fwrite(ch,1,3,fp); fclose(fp); }
当我们按照文本方式往文件中写入数据时,一旦遇到换行符(ascll10),则会转换为回车-换行(ASCLL 13,10),在读文件时,一旦遇到回车-换行的组合(ASCLL 13 10),则会转换为换行字符(ASCll为10);
当我们按章二进制方式往文件中写入数据,则将数据在内存的存储形式原样输出到文件中;
c++,数据流操作文件的方法:
void CFileView::OnWrite() { ofstream ofs("a.txt");//打开文件 ofs.write("我的测试数据",sizeof("我的测试数据"));//写入数据 ofs.close();//关闭文件 }
void CFileView::OnRead() { ifstream ifs("a.txt"); char ch[100]; memset(ch,0,100); ifs.read(ch,100); ifs.close(); MessageBox(ch); }WIN32中API函数对文件操作的支持:
void CFileView::OnWrite() { FILE *fp=fopen("2.txt","w"); HANDLE hFile; hFile=CreateFile("5.txt",GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);//关键是关注参数的理解,打开文件 DWORD writebites; WriteFile(hFile,"我的测试数据5",strlen("我的测试数据5"),&writebites,NULL);//writefile()函数参数的添加; CloseHandle(hFile); }
void CFileView::OnRead() { HANDLE filehandle; filehandle=CreateFile("5.txt", GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); char ch[100]={0}; DWORD readbites; ReadFile(filehandle,ch,100,&readbites,NULL); ch[readbites]=0; CloseHandle(filehandle); MessageBox(ch); }//利用MFC的基础类库来操作文件
void CFileView::OnWrite() { //利用MFC里面的自带的函数类:CFile; CFile file("6.txt",CFile::modeReadWrite|CFile::modeCreate); file.Write("我的测试数据6",strlen("我的测试数据6")); file.Close(); }
void CFileView::OnRead() { //利用MFC的类库读写文件 CFile file("6.txt",CFile::modeReadWrite); char *pch; DWORD dwfilebites; dwfilebites=file.GetLength();//得到文件长度, pch=new char[dwfilebites+1];//利用文件长度,构造存储空间 pch[dwfilebites]=0; file.Read(pch,dwfilebites); file.Close(); MessageBox(pch); }利用文件对话框的“保存”和“打开”文件对话框来保存和打开一个文件:
保存文件对话框
void CFileView::OnWrite() { //利用文件对话框的方式 CFileDialog fileDialog(FALSE);//fasle 是文件保存对话框,true为文件打开对话框; fileDialog.m_ofn.lpstrTitle="我的测试文件保存对话框";//修改文件题目 fileDialog.m_ofn.lpstrFilter="text filter(*.txt)\0*.txt files(*.*)\0*.*";//添加文件过滤器,注意:\0 是必须加的 fileDialog.m_ofn.lpstrDefExt="txt";//默认的存储格式 if(fileDialog.DoModal()==IDOK) { CFile file(fileDialog.GetFileName(),CFile::modeReadWrite|CFile::modeCreate); file.Write("我的测试数据6",strlen("我的测试数据6")); file.Close(); } }打开文件对话框
void CFileView::OnRead() { CFileDialog fileDialog(TRUE);//fasle 是文件保存对话框,true为文件打开对话框; fileDialog.m_ofn.lpstrTitle="我的测试文件打开对话框"; fileDialog.m_ofn.lpstrFilter="text filter(*.txt)\0*.txt"; if(fileDialog.DoModal()==IDOK) { CFile file(fileDialog.GetFileName(),CFile::modeRead); char *pch; DWORD dwfilebites; dwfilebites=file.GetLength();//得到文件长度, pch=new char[dwfilebites+1];//利用文件长度,构造存储空间 pch[dwfilebites]=0; file.Read(pch,dwfilebites); file.Close(); MessageBox(pch); } }
修改注册表的选项函数
//添加2个按钮读写注册表的值
void CFileView::OnRegWrite() { HKEY hKey; RegCreateKey(HKEY_CURRENT_USER,"Software\\hou\\admin",&hKey);//建立一个注册表项,注意设置参数 RegSetValue(hKey,NULL,REG_SZ,"张三",strlen("张三"));//设置注册表项的一个值 RegCloseKey(hKey); } void CFileView::OnRegRead() { LONG lValue; RegQueryValue(HKEY_CURRENT_USER,"Software\\hou",NULL,&lValue);//第三个参数为NULL,则第四个参数返回注册表项的值 char *pBuf=new char[lValue]; //根据返回值分配内存, RegQueryValue(HKEY_CURRENT_USER,"Software\\hou",pBuf,&lValue);////读回注册表项的值 MessageBox(pBuf); }对注册表不同的项改变
void CFileView::OnRegWrite() { HKEY hKey; DWORD dbytes=30; RegCreateKey(HKEY_CURRENT_USER,"Software\\hou\\admin",&hKey);//建立一个 个值,表项名是”默认的“,写的是字符串,下面的函数是扩张版 RegSetValueEx(hKey,"age",0,REG_DWORD,(const BYTE *)&dbytes,4);//写一个注册表项为”age“,值为30的项 RegCloseKey(hKey); } void CFileView::OnRegRead() { HKEY hkey; RegOpenKey(HKEY_CURRENT_USER,"Software\\hou\\admin",&hkey);//打开一个表项,保存在hkey里面 DWORD dwtypes; DWORD dwvalue; DWORD dwBytes; RegQueryValueEx(hkey,"age",0,&dwtypes,(LPBYTE)&dwBytes,&dwvalue); CString str; str.Format("age=%d",dwBytes); MessageBox(str); }