文件的操作
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);
}