2011-10-13 78 views
2

我试图使用seek在c编程中获取文件大小。我无法使用fseek,stat.size或ftell,还有一个需要运行的自定义操作系统unix。 我怎么才能找到文件大小只是通过使用查找?可能吗?谢谢!如何查找文件末尾以确定文件大小?

FILE *fd = open(argv[1], "r"); 

    if(fd == NULL) 
    { 
      printf("Not able to open the file : %s\n", argv[1]); 
      return; 
    } 

    // Set the pointer to the end 
    seek(fd, 0, SEEK_END); 
+1

为什么你不能使用fseek,stat.size或ftell?你可以使用getch()吗?这是我能想到的唯一方法。 – Chriszuma

+1

你在说什么这个'seek'函数? – Mat

+0

scanf怎么样? – 2011-10-13 16:23:47

回答

6

seek?可能你的意思是lseek。看看manual pagelseek返回什么?

+0

它返回off_t? – alk

1

通常,open()返回一个int,而不是FILE *。您必须检查返回值> = 0。fopen()<stdio.h>返回FILE *。此外,对于该记录,fopen()fseek()是C标准库的一部分。 UNIX open()是POSIX的一部分。所以一般来说,fopen()/fseek()更便携。

如果你真的在一个自定义的“类Unix”环境,不再是真实的地方(即你有一个自定义的API而不是unistd.h),那么你不会提供更好的答案,信息。你能告诉我们你真的在运行什么操作系统吗?

或者像Luther建议的那样,如果您使用的是正常的<unistd.h>,请检查返回值lseek()

3

如果您只是想知道使用偏移量= 0与whence = SEEK_END的结构是否将文件偏移量定位到文件末尾,那么“是”您是对的,至少对于“标准f/lseek”我遇到过。

lseek应该直接返回文件偏移量。 对于fseek以下ftell会得到你的文件偏移量。