搜索
查看: 8323|回复: 13

请教下fsys.file的一段代码

  [复制链接]

1

主题

10

帖子

64

积分

一级会员

Rank: 2

积分
64
发表于 2010-11-30 17:02:20 | 显示全部楼层 |阅读模式
本帖最后由 200p 于 2010-11-30 17:05 编辑

文件位于lib\fsys\file.aardio,原文件代码如下:
  1.                                 var f=mode[1];
  2.                                 if( f='r'# ) {
  3.                                         creation |= 0x3/*_OPEN_EXISTING*/  
  4.                                         access |= 0x80000000/*_GENERIC_READ*/;
  5.                                 }
  6.                                 else {
  7.                                         creation |= 0x4/*_OPEN_ALWAYS*/  
  8.                                         access |= 0x40000000/*_GENERIC_WRITE*/
  9.                                         if( f='w'#  )
  10.                                                 creation |= 0x5/*_TRUNCATE_EXISTING*/   
  11.                                         else
  12.                                                 seekend = true;
  13.                                 }
复制代码

请注意下f='r'# 和f='w'# 这两处的地方,请教下#号的作用是什么?如果排除掉#号,这个判断语句是永远只读打开文件的。
我认为这里是一个bug,请指教。
在下的版本号是0.56.9.8


回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2010-11-30 17:17:13 | 显示全部楼层

#号在后面是取字节码。 你去掉#号的确会制造一个BUG,再放回去就可以了。

#号在后面是取字节码。

你去掉#号的确会制造一个BUG,再放回去就可以了。
回复

使用道具 举报

1

主题

10

帖子

64

积分

一级会员

Rank: 2

积分
64
 楼主| 发表于 2010-11-30 17:33:26 | 显示全部楼层

[i=s] 本帖最后由 200p 于 2010-12-8 09:40 编辑 [/i] [code]import fsys.file; fp = fsys.f

本帖最后由 200p 于 2010-12-8 09:40 编辑
  1. import fsys.file;
  2. fp = fsys.file("hello.txt", "w");
  3. fp.close()
复制代码

多谢回复。在没改变原始代码的情况下,我试下了,上边的代码其实并不会生成一个叫hello.txt的文件,并且还报了一个fp为null的错误。
另外,我第一个帖子的意思是 f='w'# 为什么不是 f=='w'#呢? f='w'# 难道不是一个赋值式的语句?
期待您的回复。

ps:是fsys.file,我写错了。改正

点评

应当是 import fsys.file;  发表于 2010-12-7 11:17
回复

使用道具 举报

5

主题

35

帖子

217

积分

二级会员

Rank: 3Rank: 3

积分
217
发表于 2010-11-30 19:11:41 | 显示全部楼层

在if语句里判断相等,我喜欢用 if(f=='w'#),用if(f='w'#)判断总觉得别扭。

在if语句里判断相等,我喜欢用 if(f=='w'#),用if(f='w'#)判断总觉得别扭。
回复

使用道具 举报

1

主题

10

帖子

64

积分

一级会员

Rank: 2

积分
64
 楼主| 发表于 2010-12-1 09:00:09 | 显示全部楼层

了解了,原来if里边的f='w'#也可以判断,不太习惯哈。 fp = fsys.file("hello.txt", "w"); 为啥不能创建文件呢?

了解了,原来if里边的f='w'#也可以判断,不太习惯哈。
fp = fsys.file("hello.txt", "w");
为啥不能创建文件呢?
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2010-12-1 09:51:13 | 显示全部楼层

兼容vb里的写法,喜欢用哪一种写法都可以,不象C++忘记写一个等号会出大问题

兼容vb里的写法,喜欢用哪一种写法都可以,不象C++忘记写一个等号会出大问题
回复

使用道具 举报

1

主题

10

帖子

64

积分

一级会员

Rank: 2

积分
64
 楼主| 发表于 2010-12-1 09:59:23 | 显示全部楼层

[i=s] 本帖最后由 200p 于 2010-12-1 10:23 编辑 [/i] 谢谢大家哈。 fp, err = fsys.file("hello.t

本帖最后由 200p 于 2010-12-1 10:23 编辑

谢谢大家哈。
fp, err = fsys.file("hello.txt", "w"); 不能创建文件

原因找到了,是因为当f='w'#成立时,creation |= 0x5/*_TRUNCATE_EXISTING*/,多了0x5/*_TRUNCATE_EXISTING*/这个参数,导致文件必须存在,修改creation参数也是没有意义的。
回复

使用道具 举报

40

主题

565

帖子

3045

积分

新手入门

超级初学者

积分
3045
发表于 2010-12-1 10:21:57 | 显示全部楼层

[quote][size=2][color=#999999]200p 发表于 2010-12-1 09:00[/color] [url=forum.php?mo

200p 发表于 2010-12-1 09:00
了解了,原来if里边的f='w'#也可以判断,不太习惯哈。
fp = fsys.file("hello.txt", "w");
为啥不能创建文 ...

这个真不知道,
我都用file = io.open(path,"w")创建文件对象
http://echong.taobao.com 各类话费充值,请多支持!
回复

使用道具 举报

1

主题

10

帖子

64

积分

一级会员

Rank: 2

积分
64
 楼主| 发表于 2010-12-1 10:24:52 | 显示全部楼层

[quote][size=2][color=#999999]fantasynew 发表于 2010-12-1 10:21[/color] [url=forum.

fantasynew 发表于 2010-12-1 10:21
这个真不知道,
我都用file = io.open(path,"w")创建文件对象

因为fsys.file是用的createfile的api,比较习惯用这个打开文件。
回复

使用道具 举报

40

主题

565

帖子

3045

积分

新手入门

超级初学者

积分
3045
发表于 2010-12-1 10:34:55 | 显示全部楼层

[b]回复 [url=forum.php?mod=redirect&goto=findpost&pid=1420&ptid=201][color=Olive]2

回复 200p 的帖子

io.open应该也是用同样的API
http://echong.taobao.com 各类话费充值,请多支持!
回复

使用道具 举报

1

主题

10

帖子

64

积分

一级会员

Rank: 2

积分
64
 楼主| 发表于 2010-12-1 12:23:50 | 显示全部楼层

[quote][size=2][color=#999999]fantasynew 发表于 2010-12-1 10:34[/color] [url=forum.

fantasynew 发表于 2010-12-1 10:34
回复 200p 的帖子

io.open应该也是用同样的API

是这样吗?多谢了。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2010-12-7 11:17:24 | 显示全部楼层

[quote][size=2][color=#999999]200p 发表于 2010-12-1 09:59[/color] [url=forum.php?mo

200p 发表于 2010-12-1 09:59
谢谢大家哈。
fp, err = fsys.file("hello.txt", "w"); 不能创建文件

我修改了一个fsys.file库,你再试试
回复

使用道具 举报

1

主题

10

帖子

64

积分

一级会员

Rank: 2

积分
64
 楼主| 发表于 2010-12-8 09:39:07 | 显示全部楼层

[i=s] 本帖最后由 200p 于 2010-12-8 09:48 编辑 [/i] [quote][size=2][color=#999999]jacen

本帖最后由 200p 于 2010-12-8 09:48 编辑
jacen 发表于 2010-12-7 11:17
我修改了一个fsys.file库,你再试试

有心了,多谢。我试下。
OK,试过了,要的就是这样的效果,辛苦了。
回复

使用道具 举报

2

主题

22

帖子

171

积分

一级会员

Rank: 2

积分
171
发表于 2017-7-30 14:31:15 | 显示全部楼层
有咩有用到这个:file.readBuffer()在参数2里指定长度,是不是有长度限制呢,发现最后传进Kernel32.api的是int型的参数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-14 01:56 , Processed in 0.078125 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表