1

查看(或编辑)一个 .gz 文件时,vim 知道找到 gunzip 并正确显示该文件。
在这种情况下, getfsize(expand("%")) 将是 gzip 压缩文件的大小。

有没有办法获得扩展文件的大小?

[编辑]
解决这个问题的另一种方法可能是获取当前缓冲区的大小,但 vim 中似乎没有这样的功能。我错过了什么吗?

4

4 回答 4

1

没有简单的方法来获取 gzip 压缩文件的未压缩大小,除非将其解压缩并使用 getfsize() 函数。那可能不是你想要的。我查看了RFC 1952 - GZIP File Format Specification,唯一可能有用的是 ISIZE 字段,其中包含“......原始(未压缩)输入数据的大小模 2^32”。

编辑:

我不知道这是否有帮助,但这是我拼凑在一起的一些概念验证 C 代码,用于检索 gzip 文件中 ISIZE 字段的值。它适用于我使用 Linux 和 gcc,但你的里程可能会有所不同。如果您编译代码,然后将 gzip 文件名作为参数传入,它将告诉您原始文件的未压缩大小。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *fp = NULL;
    int  i=0;

    if ( argc != 2 ) {
        fprintf(stderr, "Must specify file to process.\n" );
        return -1;
    }

    // Open the file for reading
    if (( fp = fopen( argv[1], "r" )) == NULL ) {
        fprintf( stderr, "Unable to open %s for reading:  %s\n", argv[1], strerror(errno));
        return -1;
    }

    // Look at the first two bytes and make sure it's a gzip file
    int c1 = fgetc(fp);
    int c2 = fgetc(fp);
    if ( c1 != 0x1f || c2 != 0x8b ) {
        fprintf( stderr, "File is not a gzipped file.\n" );
        return -1;
    }


    // Seek to four bytes from the end of the file
    fseek(fp, -4L, SEEK_END);

    // Array containing the last four bytes
    unsigned char read[4];

    for (i=0; i<4; ++i ) {
        int charRead = 0;
        if ((charRead = fgetc(fp)) == EOF ) {
            // This shouldn't happen
            fprintf( stderr, "Read end-of-file" );
            exit(1);
        }
        else
            read[i] = (unsigned char)charRead;
    }

    // Copy the last four bytes into an int.  This could also be done
    // using a union.
    int intval = 0;
    memcpy( &intval, &read, 4 );

    printf( "The uncompressed filesize was %d bytes (0x%02x hex)\n", intval, intval );

    fclose(fp);

    return 0;
}
于 2009-01-08T22:33:37.103 回答
1

这似乎适用于获取缓冲区的字节数

(line2byte(line("$")+1)-1)

于 2009-01-12T09:23:06.690 回答
0

如果你在 Unix/linux 上,试试

:%!wc -c 

以字节为单位。(如果您安装了例如 cygwin,它可以在 Windows 上运行。)然后点击u获取您的内容。

高温高压

于 2009-01-08T22:21:20.980 回答
0

在 vim 编辑器中,试试这个:

<Esc>:!wc -c my_zip_file.gz

这将显示文件的字节数。

于 2009-08-12T14:57:46.503 回答