标题:请问一个比较深的问题
只看楼主
zslinhuihui
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-10-20
 问题点数:0 回复次数:9 
请问一个比较深的问题
在vfp中,用项目管理器包含了一个文件(如文件date.dat,),然后对这个项目进行编译成.exe文件后,该.exe文件里包含了文件date.dat,问题是怎样从该.exe文件中释放出date.dat文件给程序使用呢?
搜索更多相关主题的帖子: dat 文件 exe vfp 项目管理 
2007-10-21 21:39
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
得分:0 
释放不释放程序都能使用。包含的能读,不包含的能读写

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2007-10-22 07:40
zslinhuihui
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-10-20
得分:0 
回复2楼
“包含在.exe中的文件能读,不包含在.exe中的文件能读写”这个当然知道,实践中本人也尝试过调用包含在.exe中的文件,但是这些文件是vfp能识别的文件如.dbf,.bmp格式的文件。现在问题是VFP不能处理的文件(如文件date.dat,这个文件不是数据表也不是图片,是一个加密的数据文件,为了安全及隐蔽将它包含在.exe中,程序运行时,它只需要读不需要写,但需通过程序自动释放出来或者叫读出来,生成一临时文件,进行处理,处理后立即删除该临时文件),所以现在的问题是如何通过程序自动将它释放出来或者读出来。请问哪位高手有这方面的经验?
2007-10-22 22:24
xinjie
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:257
专家分:501
注 册:2007-8-11
得分:0 
Copy File 命令应该可以做到。

但你这样的方式毫无意义。属于自欺欺人。
2007-10-23 01:11
zslinhuihui
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-10-20
得分:0 
回复3楼
这样的方式并不是毫无意义,更不是自欺欺人,是有实际应用的。
copy file 经验证是做不到的(将date.dat 包含在编译的.exe文件中,然后将date.dat从磁盘中删除或移走,使用copy file 时程序提示文件找不到,这证明copy file命令并不是在编译的.exe文件中查找date.dat,而是在磁盘中查找,这达不到我的要求)。
copy file 这个命令我一开始时已偿试使用,但不行。

不过,经过我连续几小时的多种方法偿试,我终于找到方法了。实现将date.dat 从编译的.exe文件中释放出来。
2007-10-23 01:33
zslinhuihui
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-10-20
得分:0 
刚才应该是回复4楼。
2007-10-23 01:34
xinjie
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:257
专家分:501
注 册:2007-8-11
得分:0 
Copy File 命令确实不行。向楼主道歉。

不知道楼主用什么方法实现的,是否可以共享。
2007-10-23 13:40
zslinhuihui
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-10-20
得分:0 
回复7楼
使用vfp中的低级文件函数,象本帖的例子,如果date.dat 包含在编译的.exe文件中,则行用以下命令:
lsFileHandle=FOPEN("date.dat",10)&&使用FOPEN()打开文件date.dat,
&&由于date.dat 包含在编译的.exe文件,
&&系统调入.exe文件时会同时调入date.dat 在内存中,
&&FOPEN()会首先在内存中找相应的文件。找到后打开,并将文件句柄号传给lsFileHandle
&&参数10为只读打开,包含在编译的.exe文件中的date.dat 只能只读打开。

wrFileHandle=FCREATE("lsfile.dat",0)&&使用FCREATE()在当前目录建立一个临时文件
&&文件名暂定为lsfile.dat,参数0为读写建立,并将文件句柄号传给wrFileHandle

&& 然后使用以下循环将date.dat内容写到lsfile.dat中
=FSEEK(lsFileHandle,0,0) &&将date.dat的文件指针指向文件头
do whil not FEOF(lsFileHandle)&&文件指针到date.dat文件尾时结束
tempstring=FREAD(lsFileHandle,254)&&每254字节读取date.dat文件内容给tempstring
lslsstring=changstring(tempstring)&&将加密内容tempstring进行解密处理。
&&自定函数changstring()为解密及判断提取函数,处理后的内容传给lslsstring。
=FWRITE(wrFileHandle,lslsstring)&&将lslsstring写入文件lsfile.dat中
endd
=fclose(lsFileHandle)&&关闭文件date.dat
=fflush(wrFileHandle)&&将lsfile.dat的内存缓冲写入磁盘
=fclose(wrFileHandle)&&关闭文件lsfile.dat

**生成lsfile.dat文件后,对该文件进行处理。
**处理完后用delete file lsfile.dat删除文件lsfile.dat
**整个过程费时不足1毫秒,用户没有任何感觉,处理很隐蔽。
2007-10-23 19:51
xinjie
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:257
专家分:501
注 册:2007-8-11
得分:0 
我记得VFP中似乎有一个函数可以做到。

楼主的方法也不错。
2007-10-24 13:49
xinjie
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:257
专家分:501
注 册:2007-8-11
得分:0 
FileToStr()
StrToFile()
2007-10-26 22:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-179649-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.328536 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved