有关文件读与写的问题,求教于各位
是这样的,
我想要在EXE文件尾部插入数据,使其运行后能得到,原理应该很简单,但实施时遇到了一些困难:
1.发现EXE文件运行后不能读取自身:
CFile file;
file.open(__argv[0],CFile::moderead);
.....
可每次都失败,file.h_file总是表示为打开失败。
2.读数据也时发现不能直接得到
不读取自身,读取其他文件,得到的数据不准确:
while (file.GetLength()>=file.GetPosition()+10000)
{
file.HugeRead(buf,10000);
str+=buf;
}
file.HugeRead(buf,file.GetLength()-file.GetPosition());
发现,每次应读10000个字节,实际上str却每次增加10003个字节的内容。
可能是我读取的方式有误,请问有没有解决的方法?
这两个问题使我的程序无法继续,希望大家能尽量帮助我,谢谢。
问题点数:100、回复次数:5Top
1 楼Dai_Weis()回复于 2003-02-02 18:01:48 得分 25
我看到有一办法你先创建一个副本程序并把控制权交给副本运行,然后就可以对已经退出运行的执行文件修改了
关于读取问题,有些时候你无法保证当前的指针一定在同一个位置,使用seek函数对指针进行移动,我正在写的软件有大量的文件操作还没有发现这样的问题.Top
2 楼AthlonxpX86(一坨屎)回复于 2003-02-02 18:14:05 得分 25
CFile类中好像没有HugeRead吧,是ReadHuge吧,建议不要用他,32位程序中已经废除了他,用read就可以啊Top
3 楼jindayu(Idislikework)回复于 2003-02-02 21:54:43 得分 0
没有其他方法的话我会用DaiWeis()所说的方法,请问还有没有其他方法,可以避开再建一个文件?Top
4 楼Richuen22(Vista)回复于 2003-02-03 00:53:27 得分 50
先试一下这样,看再有没有后面的问题出现,若有就说一声。
file.open(__argv[0],CFile::modeRead | CFile::shareDenyNone );Top
5 楼jindayu(Idislikework)回复于 2003-02-03 01:10:21 得分 0
太好了!
试用file.open(__argv[0],CFile::modeRead | CFile::shareDenyNone );
运行后也可以打开。
谢谢Dai_Weis(),AthlonxpX86(一滴水)与Richuen22(劲深蓝) !
Top




