CString:: GetBuffer后要release

来源:互联网 发布:linux 压缩多个文件 编辑:程序博客网 时间:2024/06/07 00:23

程序需要读一个数据文件, 居然有点问题。

int readFileByBinary(){CString currentDirectory;GetCurrentDirectory(1000, currentDirectory.GetBuffer(1000));cout << currentDirectory << endl;ifstream ifstr;//currentDirectory.Replace("\\", "\\\\");//currentDirectory.ReleaseBuffer();CString tempDirect =  currentDirectory + "\\test.txt";currentDirectory += "\\test.txt";cout << currentDirectory << endl;ifstr.open(currentDirectory.GetBuffer(), ios::in);if(!ifstr.is_open()){cout << "No files" << endl;return 0;}string line;char lineLC[255];while(!ifstr.eof()){ifstr >> line;cout << line << endl;}return 1;}

总是打不开文件, 输出文件路径发现后续的 test.txt并没有增加到原先字符串的末尾。开始时怀疑是不是使用了getbuffer导致长度固定,于是定义新的 

tempDirectory = currentDirectory
发现还是连接不上后续字符串。


查找MSDN,在getbuffer说明里面有这样一段话

If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString member functions. The address returned by GetBuffer may not be valid after the call to ReleaseBuffer since additional CString operations may cause the CString buffer to be reallocated. The buffer will not be reallocated if you do not change the length of the CString.
就是说如果使用getbuffer为cstring变量分配的空间,那么对这个变量使用其他操作以前必须releasebuffer.后面说了原因,如果不release是不会重新分配空间的。

加上releasebuffer一句后,顺利解决。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝拍胸片衣服有扣子怎么办 前扣内衣扣子坏了怎么办 运动内衣穿上平胸怎么办 文胸的海绵变形了怎么办 文胸背部松紧变形了怎么办 黑色裤子被漂白水漂红了怎么办 黑色裤子晒红了怎么办 黑色裤子泛红了怎么办 黑色裤子洗红了怎么办 新内衣穿了痒怎么办 灰色针织运动裤洗完发黄怎么办 皮衣买大了一号怎么办 紧身衣破了一个洞怎么办 紧身衣破了一个小洞怎么办 内衣肩带不带调整的怎么办 不正确佩戴胸罩导致下垂怎么办 增肌时期晚上饿怎么办 啤酒和可乐喝了怎么办 脸部毛孔堵塞不出汗怎么办 减肥运动完饿了怎么办 想减肥晚上饿了怎么办 孕妇喝不进去水怎么办 跑步喝多了水怎么办 衣柜门轮子坏了怎么办 穿瑜伽裤下边有缝怎么办 3岁宝宝比较内向怎么办 我想和我同学搞基怎么办 自己做的葡萄酒太甜怎么办 吉米学校想退款怎么办 汽车租赁公司不退押金怎么办 身材不好怎么办健身教练形象照 反祈祷式做不到怎么办 窦性心跳过缓怎么办 四维彩超查出胎儿心脏有问题怎么办 减脂肚子饿了怎么办 做瑜伽腰扭到了怎么办 出了汗怎么办活动反思 农村都是老人和孩子怎么办 瑜伽垫容易出现痕迹怎么办 37岁失业了该怎么办 45岁找什么工作怎么办