我正在开发一个运行在HP-NONSTOP上的C应用程序,它需要获取磁盘上文件的大小.已经实现的方法如下所示:

char *filename;
short itemlist;
long fileLength = 0;
short retCode;

itemlist = 142; /* file size */
retCode = FILE_GETINFOLISTBYNAME_( filename,
                                 (short)strlen(filename),
                                 &itemlist,
                                 1,
                                 (short*)&fileLength,
                                 sizeof(fileLength) );

当我读到in the documentation时,这只适用于大小不超过2 GB的文件:

如果引用的文件是[...]大于大约2 GB的OSS文件,项目代码将返回-1,没有错误指示.

因此,我的问题如下:

  • 如何获取大于2 GB的文件大小?
  • 有没有办法了解FILE_GETINFOLISTBYNAME_是如何实施的?也许人们可以为大文件编写自己的实现.

推荐答案

不确定为什么选项142不返回2 GB文件的大小,即使它使用无符号32位变量来返回大小.

您可以使用选项191,它将以64位变量返回大小.

以下是选项142的文档,该选项建议对较大的文件大小使用选项191.

聚合EOF.对于磁盘对象,为文件的文件结尾值. 对于已打开整个文件的分区文件, 返回整个文件的文件结尾值.返回值 %hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 此无符号四字节属性.在本例中,要获取 文件结尾值,使用8字节属性,这是项代码 191.由项目191取代

C++相关问答推荐

为什么下面的递归基本情况在C中不起作用?

来自stdarg.h的c中的va_args无法正常工作<>

将fget()与strcMP()一起使用不是正确的比较

为什么net/if.h在ifaddrs.h之前?

为什么即使在强制转换时,此代码也会溢出?

在C++中访问双指针

我的C函数起作用了,但我不确定为什么

OpenSSL:如何将吊销列表与SSL_CTX_LOAD_VERIFY_LOCATIONS一起使用?

用C++构建和使用DLL的困惑

为什么我在C代码中得到一个不完整的类型?

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

如何在C中用bool进行文件I/O?

不带Malloc的链表

在git补丁中自动添加C的宏

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

在同一范围内对具有相同类型的变量执行的相同操作在同一C代码中花费的时间不同

STM32:代码的执行似乎取决于它在闪存中的位置

将数组中的所有元素初始化为 struct 中的相同值

Makefile - 将 .o 文件放入子文件夹中

在 C/C++ 中原子按位与字节的最佳方法?