CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

两个简单问题100分,快来接分

楼主boyplayee()2006-03-14 22:11:26 在 VC/MFC / 基础类 提问

问题1:  
  读取*.txt文件,发现用我以下代码  
  CString   context;                                        
  CStdioFile   f1(pFileName,CFile::modeRead);  
  CString   strLine;  
  while(f1.ReadString(strLine))     //一行行地读  
  context=context+strLine;  
   
  的话只能读取文件不是很大的文本,我读取8M大的文本就一直停着不动了,  
  有没有办法一次性把8M大的文本全部存到一个字符串里?  
   
  为什么8M的文本就读不动了呢?  
   
   
  问题2:  
  char   *s   =   splitFun(pctx,0,"C:\\CSW\\");     //路径为本组件的存放路径  
  我修改成相对路径char   *s   =   splitFun(pctx,0,"\\CSW\\");就找不到组件了,  
  改成".\\CSW\\","..\\CSW\\"   都没用,相对路径应该怎么改呢?  
  问题点数:100、回复次数:23Top

1 楼boyplayee()回复于 2006-03-14 22:20:33 得分 0

在来一个问题:  
  对话框中有一个button和一个edit控件   ,相关代码:  
  OnButton(){  
  CFileDialog   dlg(.............)  
  if(dlg.DoModal()==IDOK)  
  {  
   
  UpdateData(true);  
  m_edit=dlg.GetPathName();  
                  SetWindowText(m_edit);////这行正确显示了,确定m_edit里有值  
  }  
   
  为什么我选择了文件之后,Edit控件里不出现文件路径呢?Top

2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-14 22:22:07 得分 10

1.应该一次读入一整块,然后在内存中进行分析或者使用FileMapping  
  2.你的程序运行时的工作目录在哪?Top

3 楼boyplayee()回复于 2006-03-14 22:53:03 得分 0

1"一次读入一整块","FileMapping"   怎么做呢?  
   
  2运行时的工作目录是我整个工作文件夹所在的目录,即是*.exe运行的目录Top

4 楼Steven7(Steven7)回复于 2006-03-14 22:55:50 得分 12

第一个问题,需要用buffer  
  第二个问题,没有看到代码,估计和splitFun的实现有关  
  最后一个问题简单,需要   UpdateData(FALSE)Top

5 楼vcmute(BCare4 H1Rest Good9!)回复于 2006-03-14 22:58:03 得分 12

DWORD   len=f.GetLength();  
  BYTE   buf=new   BYTE[len];  
  f.ReadHuge(buf,len);Top

6 楼goodboyws(深夜不眠者(VCMVP))回复于 2006-03-14 23:13:20 得分 6

\\CSW\\写法不对Top

7 楼goodboyws(深夜不眠者(VCMVP))回复于 2006-03-14 23:14:49 得分 4

要看你的运行目录在哪儿Top

8 楼boyplayee()回复于 2006-03-14 23:19:19 得分 0

本组件的存放路径   就在MFC.exe的同一个目录的下的CSW文件夹下Top

9 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-03-15 00:17:58 得分 13

第一个问题,需要用buffer  
  DWORD   len=f.GetLength();  
  BYTE   buf=new   BYTE[len];  
  f.ReadHuge(buf,len);  
  第二个问题,没有看到代码,估计和splitFun的实现有关  
  最后一个问题简单,需要   UpdateData(FALSE)  
  Top

10 楼TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669)回复于 2006-03-15 00:19:40 得分 0

除了使用横秋的方法:  
  DWORD   len=f.GetLength();  
  BYTE   buf=new   BYTE[len];  
  f.ReadHuge(buf,len);  
   
  之外,你还可以使用一个变量,每读一行就加1,如果等于100行,则将读取的context写入到一个edit控件里,或者字符串数组中去,然后context清空,继续读取...读取完毕后,控件里的内容或数组中的内容就是你要的内容了.不过这个方法没有上面的好.Top

11 楼TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669)回复于 2006-03-15 00:26:55 得分 2

第三个问题,你修改控件内容后,需要   UpdateData(FALSE)让控制接受并重画才能显示.  
   
  第二个问题,如果的确不能使用相对路径,你可以先取得当前路径GetCurrentDirectory.并保存在一个变量里,然后与你的子目录相连接,组合成绝对路径,这种方法一定行的,我处理过这类问题,最后也是懒得再研究,直接取绝对路径了事.  
   
  祝成功Top

12 楼echomo123(无语)回复于 2006-03-15 01:08:31 得分 4

1.有读取大文件的函数,不过一般不用  
  CFile.ReadHuge(p,length);Top

13 楼ccs02287(☆兜兜里有糖☆偶滴兜兜里有糖,你和我玩不?)回复于 2006-03-15 09:48:46 得分 2

换别的函数吧Top

14 楼boyplayee()回复于 2006-03-15 14:20:13 得分 0

第三个问题   出现如下奇怪问题:  
  OnButton(){  
  CFileDialog   dlg(.............)  
  if(dlg.DoModal()==IDOK)  
  {  
   
  UpdateData(false);  
  m_edit=dlg.GetPathName();  
                  SetWindowText(m_edit);////这行正确显示了,确定m_edit里有值  
  }  
   
   
  当我更换另一个盘符或者目录后,第一个   Edit控件里显示总是不变,从新第二次选择文件后才更新,这是怎么回事呢?Top

15 楼TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669)回复于 2006-03-15 14:35:56 得分 0

老兄是在下面的操作后UpdateData(false);  
   
  ////////////////////////////////////////////////  
  m_edit=dlg.GetPathName();  
                  SetWindowText(m_edit);////这行正确显示了,确定m_edit里有值  
   
                  UpdateData(false);     //这里!!!!!!!!!!!!!!!!!!!!!  
  }  
  Top

16 楼boyplayee()回复于 2006-03-15 19:29:47 得分 0

第二个问题还没解决,如何获得这个MFC程序的路径(运行的时候获得).Top

17 楼boyplayee()回复于 2006-03-15 19:42:45 得分 0

读取8M大的文本就一直停着不动了,这个问题我猜是不是一个CString的存储是有限制的.  
  另:  
  BYTE   buf=new   BYTE[len];      
  f.ReadHuge(buf,len);  
  通不过编译啊Top

18 楼shmily1280(锄禾)回复于 2006-03-15 20:40:29 得分 3

楼上的问题要自己调试,大家给的是思路和方法  
  Top

19 楼ruodeer(看我的个性签名都给我分)回复于 2006-03-15 21:01:03 得分 1

又学了一招      
  顶Top

20 楼xiachangyu()回复于 2006-03-15 23:35:27 得分 1

顶Top

21 楼TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669)回复于 2006-03-17 10:52:36 得分 25

获取自身程序的路径  
   
   
  使用GetModuleFileName()可以得到全路径,再用AfxGetApp()->m_pszExeName可获得程序名  
  下面是个例子:  
          TCHAR   exeFullPath[MAX_PATH];     //定义全路径变量MAX_PATH一般为256大小  
          CString   strPath;   //用于后面对TCHAR   []的转换  
          GetModuleFileName(NULL,exeFullPath,MAX_PATH);   //取得全路径名,NULL表示自身程序  
          strPath=(CString)exeFullPath;   //强制转换  
          int   position=strPath.ReverseFind('\\');     //找到最后一个\\的位置,因为这是包括程序名(即*.EXE)在内的全路径名,要去掉后面的*.EXE得到的才是路径,而不包括程序文件名.  
          strPath=strPath.Left(position+1);   //这里截取  
   
  如果你取得的路径后面没有\\,一般来说,取得路径后你还要在后边加上“\\”才行。    
   
  还有,除了这种方法可以在程序任意地方,任何时候使用之外,还有二种方法你也可以使用,但是要在程序开始时使用,因为你改变目录后,它也会跟着改变,并且这种不是推荐的用法,只是给你多一个选择和多一个思路:  
   
  方法2.在一启动的时候用   GetCurrentDirectory获得启动时的目录,这个目录在许多情况下就是程序所在目录,但用户可以通过修改快捷方式中的设置启动目录。    
   
  方法3.  
          调用__argv[0],如strcpy(filename,   __argv[0]);  
            __argv[0]包括本程序的路径和EXE文件名,你可以从中得到程序路径。方法如第一种方法,这种方法不受快捷方式中的设置影响。    
  Top

22 楼TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669)回复于 2006-03-17 10:53:31 得分 0

楼主,还没答过一次这么多问题的,该给分了吧?呵呵.Top

23 楼hsyouxishe(金笛玉洁)回复于 2006-03-17 13:09:14 得分 5

参考一下我的这个帖子吧  
  http://community.csdn.net/Expert/topic/4619/4619094.xml?temp=8.274478E-02Top

相关问题

  • 简单,白拿分!!!快来!
  • DataGrid问题???(很简单哦,快来接分吧)
  • 几个简单的问题请教,快来接分啊
  • 简单问题大送分!!快快快!
  • 简单问题,快解决快给分。^_^
  • 简单的vc问提(动态连接库),送分来了,快来呀!!!
  • 简单的vc问题 送分问题。。快来拿(动态连接库)!!!
  • WCHAR []字符串转换成char []字符串的简单问题...快来接分
  • 简简单单100分,快来拿!
  • 非常简单,快来拿分!!

关键词

  • 控件
  • 文本
  • 代码
  • 组件
  • 文件
  • 修改
  • 路径
  • 目录
  • csw
  • 程序

得分解答快速导航

  • 帖主:boyplayee
  • DentistryDoctor
  • Steven7
  • vcmute
  • goodboyws
  • goodboyws
  • cyblueboy83
  • TianChong
  • echomo123
  • ccs02287
  • shmily1280
  • ruodeer
  • xiachangyu
  • TianChong
  • hsyouxishe

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo