C++ 打开TXT文件(MFC)

就是有一个button,点击一下出现一个打开文件的对话框,可以在对应的地方找到一个txt文件(就像平时我们打开文件一样),然后打开,有一个edit窗口出现文件名,另外一个出现文件的内容
只要打开一个就可以,目的只是实现这个功能

假设你的一批TXT命令文件名为: name1.txt name2.txt name3.txt ......

而复制到abc.txt文件中。

你可以这样操作:copy name1.txt+name2.txt+name3.txt abc.txt

这样即可。

说明,如果还存在第四个或以上的文件,只需在以上命令后面+第四个文件,如此类推。

可以做成批处理文件,只需将上述命令保存为aaa.bat后,执行aaa即可。

但是,上述只能保存文件名的内容,而不能保存文件名。如果一定要保存文件名,只能将文件名再存放到各个文件当中,之后再执行上述命令即可。

我已经尽可能回答详细,希望你能明白。

///////////////////////////////////////////////////////////////

是用批处理命令来完成这一问题
不是vbs
楼住的意思我知道
我保存的时候也是这样
今天看都这个问题
于是想动手实现一下
说不定以后用的着
想了一下午
才得到方法
提取第一行并不是那么简单
我想用for命令但是失败了
于是采用find命令
/N参数可以显示行号
/V参数可以显示不包含的行
/C参数表示只输出符合条件的行数
有一个技巧是
如果想知道一个文件有多少行的话
可以这样
假设对于文本文件a.txt
type a.txt | find /V /C ""
意思是显示出a.txt来
在其中找出不含有""的行来
并输出行数
那么由于每一行都没有""这个东西
所以显示了所有的行

怎么得到第一行呢
可以通过显示所有的行号
然后在输出中寻找"[1]"
这是第一行的标志
但是也许有的行本来就含有"[1]"
所以我们迭代几次
寻找"[1][1][1][1][1]”那么出错的几率就小得多了

将得到的一若干"[1]"和第一行组成的串保存到一文件
利用for的/F参数 设置"]"为分隔符
取最后一个元素就得到了第一行的本来内容
最后将临时文件删除

好了
代码贴出来:

@echo off
type %1 | find /V /N "" | find /N "[1]" | find /N "[1][1]" | find /N "[1][1][1]" | find /N "[1][1][1][1]">_n_a_m_e_.txt
for /F "delims=] tokens=1,2,3,4,5,*" %%a in (_n_a_m_e_.txt) do @ren %1 %%f%~x1
del _n_a_m_e_.txt

这样就好了
注意只有四行
建议复制到记事本看
保存为re.bat就好了
比如将文件1.txt处理的话
在CMD下输入re 1.txt
那么假设那文件第一行是good的话
那么它将被重命名为good.txt

也许这还不是很方便
我们可能有很多这样的文件放在一目录下
那么可以再引进一个批处理
用它来实现自动调用

@echo off
for %%i in (%~f1\*.txt) do @call re.bat %%~fi

保存为doo.bat那么处理D盘dl目录的命令是
doo D:\dl
这样dl目录下的所有文件得到处理

最后再说几个问题
如果有几个文件的第一行相同
那么有的将得不到处理
因为不能重名

如果文件里本来就有[1][1][1][1][1]
这样的串也会有问题
只有更多的迭代
但是这样的情况很少见

如果你也需要处理子目录下的文件
那么可以结合for /R命令
这里我不考虑了

这里的方法需要两个文件
也可以合成一个
就是用第二个生成第一个
就像处理注册表文件一样
大家自己解决下吧
有人提问的话我再发贴解决

已经在XP系统上测试
本人原创,累死了
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-08-20
楼上的.......说的差不多拉。
关键地方
1、响应函数
2、CFileDialog
3、显示文件名........这个忒容易了
4、如果你用dialog方式,可以用RichEdit来显示文件内容,否则可以使用某view类型~~~~~~~~
第2个回答  2006-08-11
********************************************************
你没有说 你到底哪里不明白呀?

在Button 的事件处理函数中 首先 用CFileDialog 的一个对象显示打开对话框, 在DoModal() 返回之后,GetFileName() ,赋给Edit 的控件变量。然后UpdateData(FALSE);

之后用CFile打开文件,构造函数中用到 刚才对话框的GetPathName(),第二个参数用CFile::modeRead。之后的读取 就看你的习惯了。我喜欢用一个char数组 szBuffer[]。用Read(szBuffer, 数组大小)。最后对显示内容的那个Edit 用 SetWindowText 就行啦。

简要地说了一下过程。要是哪里不明白可以继续问。给我发消息问也行。

c++ MFC 程序对TXT文件的读取
1.用CFile或者CStdioFile打开你的文件 2.读取一行文件 如果是CFile的话比较简单,直接用scanf读取指定格式数据就可以 如果是CStdioFile的话,也可以用ReadString 然后存入一个数据类型中 3.用GetDlgItem指定你要的显示数据的edit控件 4.用SetWindowText在edit控件中显示数据 ...

C++ MFC 如何打开一个txt文件(像双击鼠标打开它一样)
void CYourDlg::OnButton1(){ ::WinExec("notepad.exe c:\\\\Setup.txt",SW_SHOW);}

如何在C++中打开建好的MFC文件?
1、在打开的ie浏览器窗口右上方点击齿轮图标,选择“Internet选项”,如下图所示:2、在打开的Internet选项窗口中,切换到安全栏,在安全选卡中点击“自定义级别”,如下图所示:3、在“安全设置-Internet 区域”界面找到“Java 小程序脚本”、“活动脚本”,并将这两个选项都选择为“禁用”,然后点击...

c++,在打开txt文件后,如何关闭DOC 窗口?
用 ShellExecute 或 CreateProcess 之类的

V C++编写一个处理TXT文档数据的MFC程序
main(void){ freopen("C:\\\\123.txt","r",stdin);int cnt=0,i=1;char s[1000];char path[100]="C:\\\\123_001.txt";while(gets(s)){ if(cnt==0){ path[9]=i%10+'0';path[8]=i\/10+'0';i++;freopen(path,"w",stdout);} deal(s);cnt++;cnt%=9000;} return 0;} ...

请问VC++(MFC)中如何读取文本文件?
在MFC下读取和写入文本可以用CStudioFile类对象,比用C读简单,它的参考资料如下:CStdioFile类成员 数据成员:m_pStream 包含了一个指向打开文件的指针 构造:CStdioFile 从一个路径或文件指针构造一个CStdioFile对象 文本读\/写 :ReadString 读取一行文本 WriteString 写一行文本 一个CStdioFile对象代表一个...

如何在C++中打开一个已经建好的MFC文件
1vc6.0软件 【打开】--【工程】--打开后缀为dsw的文件 2vs系列软件 打开后缀为sln的文件 3如果只有 cpp h文件,则新建一个MFC空工程,打开工程,插入cpp h这些源文件到工程。ok了!

VC++ 怎样打开计算机中的文件
)这个函数或者SellExecute()具体用法及例子查MSDN;如果直接是c++的就用system("c:\\\\a.txt");""里面填你要打开的那个文件的路径和名字包括后缀。头文件是stdlib.h。如果你要播放声音的话,在MFC中可以调用PlaySound();头文件是Mmsys.h,连接库是Winmm.lib,具体例子查MSDN。回答完毕 望采纳。

编写一个C++程序,进行模式匹配要求如下 可以从一个txt文档中读取...
这个是VC6的,VS2008也差不多:打开VC6,新建工程->MFCAppWizard(exe),假设工程名为Abc->选择SingleDocument,在第4步里点击Advanced,在FileExtension里填上txt,在第6步里,把CAbcView的父类改为CEditView,点Finish即可。这样编译生成的程序已经是一个功能完整的文本编辑器了。

vc的txt文件的读写操作
CFileFind finder;BOOL bWorking = finder.FindFile( "C:\\\\windows\\\\sysbkup\\\\*.cab ");while(bWorking){ bWorking=finder.FindNextFile();strFileTitle=finder.GetFileTitle();} 2.文件的打开\/保存对话框 让用户选择文件进行打开和存储操作时,就要用到文件打开\/保存对话框。MFC的...

相似回答