标题: 一个VB的问题
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-3 21:06 资料 个人空间 短消息 看全部作者
最近在做游戏的数据库,做着做着遇到了一个问题.
open "c:\aa.dbc" For Binary As #1
put #1,1,"aa"
put #1,5,"bb"
put #1,9,"cc"
close #1
这时侯文件里面大致是这样
aa  bb  cc
这时侯我想把aa  bb之后的全部去掉,代码该怎么写(文件大小相应减小)


顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-3 21:22 资料 个人空间 短消息 看全部作者


QUOTE:
原帖由Maxwell于2005-02-03, 21:15:49发表
我基本不用vb操作文件,也没记得vb有截断文件的语句。要么你用api操作,要么就每次重新完全写文件。我一般操作文件都是每次重新写一个新文件。

以往的做法是重新一个新文件,然后把这个文件删掉.我现在是想寻求更好的办法.


顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-3 21:51 资料 个人空间 短消息 看全部作者


QUOTE:
原帖由Maxwell于2005-02-03, 21:31:56发表
直接以写方式打开原来的文件重新写入即可,根本不必写到新文件里再把旧的删掉。重新写文件通常是因为文件内容改变的太多致使修改文件不合算。如果只是删除最后的字节用api就可以简单解决!

具体是调用哪个呢
顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-3 22:18 资料 个人空间 短消息 看全部作者


QUOTE:
原帖由Maxwell于2005-02-03, 22:11:08发表
SetEndOfFile

VB声明
Declare Function SetEndOfFile Lib "kernel32" Alias "SetEndOfFile" (ByVal hFile As Long) As Long
说明
针对一个打开的文件,将当前文件位置设为文件末尾
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hFile Long,指定一个文件句柄。文件的当前位置设为文件尾,文件会根据需要缩短


了解windows api是做windows程序的基本功。

说说看,怎么用API 文本浏览器找到所想要的东西?好像里面没法用中文搜索内容.
顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-4 14:14 资料 个人空间 短消息 看全部作者
太谢谢了,我要继续做战略三国数据库了,我如果还有问题会在这回贴问的
顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-7 20:44 资料 个人空间 短消息 看全部作者
问题二:假设abc.abc中是如下这样
abcdefgh
dim i as string *1
open "c:\abc.abc" For Binary As #1
get #1,1,i
close #1
如上代码,那么i会得到a
我如果要做成
Fgetfield(文件名,字段长度)这样的函数,以往的做法是
function Fgetfield(filename,fieldlen)
dim i1 as string *1
dim i2 as string *2
dim i3 as string *3
dim i4 as string *4
dim i5 as string *5
dim i6 as string *6
open filename For Binary As #1
select case fieldlen
case 1
get #1,1,i1
Fgetfield=i1
case 2
get #1,1,i2
Fgetfield=i2
case 3
get #1,1,i3
Fgetfield=i3
case 4
get #1,1,i4
Fgetfield=i4
case 5
get #1,1,i5
Fgetfield=i5
case 6
get #1,1,i6
Fgetfield=i6
end select
close #1
end function
这样如果最大只需要截取字符长度为6的字段,尚且可以,但如果要截取字符长度为n的字段(n是一个足够大的数,假设文件的字节数比n大),那应该怎么做?
顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-8 11:43 资料 个人空间 短消息 看全部作者


QUOTE:
原帖由Tom Joad于2005-02-07, 23:52:53发表
redim一个数组可以么?

能具体举个例子吗?
顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-8 23:35 资料 个人空间 短消息 看全部作者
经过一个晚上的四处询问,问题终于解决了
function Fgetfield(filename,fieldlen)
open filename For Binary As #1
dim a as string
a=string(fieldlen,0)
get #1,a
close
Fgetfield=a
end function
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-7-29 13:06
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.011540 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP