• 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);
    
    }











  • 相关阅读:
    node-red 使用 创建第一个流程
    node-red 安装
    docker postgres 导出导入数据
    6大设计模式(转)
    常见的算法
    @Autowired与@Resource的区别
    Elasticsearch
    redis搭建主从复用-读写分离
    转载redis持久化的几种方式
    后台启动mysql
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3074722.html
Copyright © 2020-2023  润新知