找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3766|回复: 4

如何进行64位文件的操作在ACE中

[复制链接]
发表于 2008-1-15 21:48:38 | 显示全部楼层 |阅读模式
ACE_OS::fseek()中offset为long。问高手如何解决。
而且在ACE中没有找到关于filelengthi64的封装。如何得到64位文件大小.
 楼主| 发表于 2008-1-15 21:48:58 | 显示全部楼层
  1. // Create a temporary filename.
  2.   ACE_FILE_Addr filename (ACE_sap_any_cast (ACE_FILE_Addr &));
  3.   if (fn != 0)
  4.     filename.set (fn);
  5.   ACE_FILE_Connector connector;
  6.   ACE_FILE_IO file;
  7.   // Open up the file.
  8.   if (connector.connect (file,
  9.                          filename,
  10.                          0,
  11.                          ACE_Addr::sap_any,
  12.                          0,
  13. ((writing) ? (O_RDWR | O_CREAT) : O_RDONLY),
  14.                          ACE_DEFAULT_FILE_PERMS) == -1)
  15.     ACE_ERROR_RETURN ((LM_ERROR,
  16.                        ACE_TEXT ("connect failed for %p\n"),
  17.                        filename.get_path_name ()),
  18.                       1);
复制代码
用这种方式了!ACE中对文件的操作推荐用这种方法,ACE_OS::fseek()一类的操作只是为了提供对各平台的接口
 楼主| 发表于 2008-1-15 21:49:06 | 显示全部楼层
再说详细一些!

ACE里的文件操作与平常的Win32里面的文件操作有所不同,这是因为ACE是为网络开发而设计的,里面普遍都遵循了Client/Server模式,这样在操作文件时,ACE把文件看做是一个Socket服务器,而进行文件操作的类(ACE_FILE_IO)被看做是一个Socket Client。

有了上面的认识,使用ACE的文件操作就容易理解了:

调用ACE_FILE_IO.send(...)其实就是进行写文件的操作;

调用ACE_FILE_IO.recv(...)其实就是进行文件的读操作。

ACE里面的文件操作类主要包括:ACE_IO_SAP、ACE_FILE、ACE_FILE_IO、ACE_FILE_Connector。

ACE_FILE_Connector是一个用来产生ACE_FILE_IO的类工厂。

ACE_FILE_IO继承于ACE_FILE,ACE_FILE继承于ACE_IO_SAP。

ACE_FILE只能够对文件进行一些整体性的操作,如:关闭文件(close)、删除文件(remove/ulink)、获取文件属性(get_info)、设置文件大小(truncate)、定位或获取文件游标位置(seek/position/tell)、获取文件路径(get_local_addr/get_remote_addr)。

ACE_FILE_IO则能够进行文件的读写操作,如:多个版本的send/recv, send_n/recv_n,  sendv/recvv,  sendv_n/recvv_n

ACE_FILE_Connector实际是为了使ACE_FILE类族能够符合Connector/Acceptor设计模式而设计的,只是没有相应的Acceptor。
 楼主| 发表于 2008-1-15 21:49:18 | 显示全部楼层
但问题是,如果是32位的系统,那么off_t也就是32位的,而ACE_FILE_Info中的off_t size_也就只能存储最大32位的值,这也普通的系统API调用是一样的,还是不能直接处理64位的文件长度。
 楼主| 发表于 2008-1-15 21:49:22 | 显示全部楼层
off_t定义是这样的

typedef long off_t;

在64位机器上,long是64位的!
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 13:46 , Processed in 0.032264 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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