C++中一些常用总结

关于文件的读取:文本文件、字节流文件

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)//恢复内存保存的数据

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值