文件读写: C语言实现: 文件读: //方法1: FILE *pFile=fopen("1.txt","r"); char content[20]; memset(content,0,20); //将数组中的内容全部设置为\0,下一行语句中遇到\0就不读取了 fread(content,1,20,pFile); //读取文件内容,直到遇见\0字符 //方法2:根据文件大小动态声明数组大小 char *content; fseek(pFile,0,SEEK_END); //将文件指针移动到末尾 long size=ftell(pFile); //fseek(pFile,0,SEEK_SET); //再此将指针移动到开始位置,从而读取 rewind(pFile); //用途和上一行语句一样 content=new char[size+1]; //多一个用来存放结尾操作符 fread(content,1,size,pFile); content[size]=0; MessageBox(content); fclose(pFile); 文件写: //如果缺少fflush或这fclose函数,程序exe不关闭的话,则输出内容不会从缓冲区中输出到文件中 FILE *pFile=fopen("1.txt","w"); //以读的方式打开 char test[3]; test[0]='a'; test[1]=10; //换行 test[2]='b'; fwrite(test,1,3,pFile); //将输出文件用Utraledit的16机制打开,发现中间多了一个回车0D(13) //fwrite("hello world",1,strlen("hello world"),pFile); fseek(pFile,0,SEEK_SET); //将文件指针移动到文件开始位置,用来跳转写入 fflush(pFile); //系统会将缓冲区中的内容立 即写入到文件中,无需fclose操作也能成功保存 fclose(pFile); //关闭文件 思考题:将数字12345写到到文本文件中 FILE *pFile=fopen("1.txt","w"); char test[5]; //0的ASSII码是48,因为在文本文件中存放的都是字符,所以必须得到指定数字对应的字符 test[0]=1+48; test[1]=2+48; test[2]=3+48; test[3]=4+48; test[4]=5+48; fwrite(test,1,5,pFile); //也可以按以下方式实现: int test=12345; char *str; itoa(test,str,10); fwrite(str,1,5,pFile); C++语言实现: 文件读: ifstream ifs("1.txt"); char ch[100]; memset(ch,0,100); ifs.read(ch,100); ifs.close(); MessageBox(ch); 文件写: ofstream os("1.txt"); os.write("hello world",strlen("hello world")); os.close(); Win 32 API实现: 文件读: HANDLE hFile=CreateFile("1.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); char result[100]; DWORD readed; //实际读取到的字节数 ReadFile(hFile,result,100,&readed,NULL); result[readed]=0; //结束字符 CloseHandle(hFile); MessageBox(result); 文件写: HANDLE hFile=CreateFile("1.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); DWORD writen; WriteFile(hFile,"hello world",strlen("hello world"),&writen,NULL); CloseHandle(hFile); MFC实现: 文件读: CFile file("1.txt",CFile::modeRead); char *buffer; DWORD length=file.GetLength(); buffer=new char[length+1]; buffer[length]=0; file.Read(buffer,length); file.Close(); MessageBox(buffer); 文件写: CFile file("1.txt",CFile::modeCreate|CFile::modeWrite); file.Write("hello world!",strlen("hello world!")); file.Close(); 文件打开保存对话框: 文件打开对话框: CFileDialog dlg(TRUE); dlg.m_ofn.lpstrTitle="我的文件打开"; dlg.m_ofn.lpstrFilter="Text Files(.txt)\0*.txt\0All Files(*.*)\0*.*\0\0"; if(IDOK==dlg.DoModal()) { CFile file(dlg.GetFileName(),CFile::modeRead); char *buffer; DWORD length=file.GetLength(); buffer=new char[length+1]; buffer[length]=0; file.Read(buffer,length); file.Close(); MessageBox(buffer); } 文件保存对话框: CFileDialog dlg(FALSE); dlg.m_ofn.lpstrTitle="我的文件保存"; dlg.m_ofn.lpstrFilter="Text Files(.txt)\0*.txt\0All Files(*.*)\0*.*\0\0"; dlg.m_ofn.lpstrDefExt="txt"; if(IDOK==dlg.DoModal()) { CFile file(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite); file.Write("hello world!",strlen("hello world!")); file.Close(); } 注册表读写: 系统默认位置(在NT之前是记录在Win.ini文件中): 读: CString strSection = "My Section"; CString strStringItem = "My String Item"; CWinApp* pApp = AfxGetApp(); CString result=pApp->GetProfileString(strSection, strStringItem, NULL); MessageBox(result); 写: //由MSDN得知,在NT以后,WriteProfileString函数将设置写在注册表中 CString strSection = "My Section"; CString strStringItem = "My String Item"; CWinApp* pApp = AfxGetApp(); pApp->WriteProfileString(strSection, strStringItem, "test"); 用户自定义位置: 读: LONG strLenth; //RegQueryValue就是为了得到没有名称或默认的Value的值的 //第一次调用为了得到值的大小 RegQueryValue(HKEY_LOCAL_MACHINE,"software\\VS\\Test",NULL,&strLenth); //在MSDN中已经指出RegQueryValue函数的最后一个参数lpcbValue已经包含了终止符号, //所以不需要在此添加终止符号了,即char *pBuffer=new char[strLenth+1]; char *pBuffer=new char[strLenth]; //第二次调用,才真正是为了得到值 RegQueryValue(HKEY_LOCAL_MACHINE,"software\\VS\\Test",pBuffer,&strLenth); MessageBox(pBuffer); // RegQueryValueEx 函数的使用为了获得指定名称的值 HKEY hKey; DWORD dwLength; //接收值的长度 DWORD dwType; //接收值的类型 DWORD dwValue; //接收值本身 RegOpenKey(HKEY_LOCAL_MACHINE,"software\\VS\\Test",&hKey); //打开子项 RegQueryValueEx(hKey,"age",NULL,&dwType,(LPBYTE)&dwValue,&dwLength); //打开值 CString result; result.Format("%d",dwValue); MessageBox(result); 写: HKEY hKey; RegCreateKey(HKEY_LOCAL_MACHINE,"software\\VS\\Test",&hKey); //RegSetValue就是为了给没有名称或默认的Value设置值的 RegSetValue(hKey,NULL,REG_SZ,"HELLO WORLD",strlen("HELLO WORLD")); RegCloseKey(hKey); //RegSetValueEx 函数为了设置指定名称值存在,当然该函数也可以实现RegSetValue的功能 DWORD dwAge=30; RegSetValueEx(hKey,"age",0,REG_DWORD,(BYTE*)&dwAge,4); RegCloseKey(hKey); |
|
来自: Alex@ZW > 《孙鑫VC学习笔记》