vc++学习笔记12====关于文件的操作

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

}











原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3074722.html