关于文件的读取:文本文件、字节流文件
1 文本文件:
相关的知识:
头文件:fstream和wfstream,分别用来操作单字节和双字节数据
方法:
ofstreamfile_op(“D:\\test.txt”);
file_op<< “haha” << endl;
当输出中文的时候,有时出现乱码,这样做:
locale &loc=locale::global(locale(locale(),"",LC_CTYPE));
ofstream file_op(“D:\\test.txt”);
locale::global(loc);
file_op << “哈哈” << endl;
双字节的时候仅仅将ofstream改为wofstream。
2 字节流文件:
主要有这么几个windows API:
CreateFile、GetFileSize、ReadFile、WriteFile、CloseHandle
具体例子:
以读、写方式创建一个文件的内核对象:
HANDLE m_hFile =CreateFile(
szPathName,
GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
然后得到该文件在内存中展开所需要的内存大小:
DWORD size =GetFileSize(m_hFile,NULL);
创建用来接收该文件字节流的内存区块:
BYTE *p_pbyBase = (BYTE *)malloc(size);
现在就可以得到该文件内存展开后的数据流了:
Bool bRead = ReadFile(m_hFile,p_pbyBase, size, &dwByteRead, NULL);
别忘记关闭文件句柄
CloseHandle(m_hFile);
写回数据:
WriteFile(m_hFile,p_pbyBase, size, &dwByteRead, NULL)
宽窄字节操作函数:
printf(“%s \n”,str); wprintf(“%s \n”,str);
scanf(“%s ”,&str); wscanf(“%s”,&str);
cout << “”; wcout <<””;
cin >> str; wcin>> str;
memset wmemset
memcpy wmemcpy
strcat wcscat
将窄字符转化为宽字符(双字符,此时字符都占用两个字节,不再是一个字节)
char outPath[MAX_PATH_LEN]
int num =MultiByteToWideChar(0,0,outPath,-1,NULL,0);
wchar_t *w_opath = new wchar_t[num];
MultiByteToWideChar(0,0,outPath,-1,w_opath,num);
将宽字符转化为窄字符
TCHAR szBuf[BUFSIZ];
memset( szBuf, 0, sizeof(TCHAR) * BUFSIZ );
int num=WideCharToMultiByte(CP_OEMCP,NULL,szBuf,-1,NULL,0,NULL,FALSE);
char *c_name=new char[num+1];
WideCharToMultiByte(CP_OEMCP,NULL,szBuf,-1,c_name,num,NULL,FALSE);
c_name[num]=0;
宏定义:
#pragma pack(push)//保存内存对齐的数据
#pragma pack(2)
………………
#pragma pack(pop)//恢复内存保存的数据