我在Objective C程序中创建了以下代码来获取目录中文件的大小,我必须用C语言来实现,而不能使用任何Objective-C方法。这可以很好地工作,并在检查小文件时给出正确的大小。但对于大文件(使用7 7GB文件进行测试),此大小变量返回的文件大小为0。有人能帮我解决这个问题吗?
//filePath is a string parameter which takes the path of the file
FILE *fp=nil;
const char *filePathInToChar = [filePath UTF8String];
fp = fopen
是什么使fgets()实现在大文件和fread上如此可怕?
要演示,请运行以下代码:
<?php
$line = str_repeat('HelloWorld', 100000) . "\n";
for($i=0; $i<10000; ++$i)
file_put_contents('myfile', $line, FILE_APPEND);
//now we have roughly a 1gig file
// We'll even let fread go first incase
// the subsequ
我一直在尝试使用using ()来获取linux系统上的硬盘大小。
我有一个函数,它应该返回正确的大小:
unsigned long long getsize(FILE *fp){
unsigned long long prev=ftell(fp);
fseek(fp,0,SEEK_END);
unsigned long long size=ftell(fp);
fseek(fp,prev,SEEK_SET);
return size;
}
但是当我在硬盘上使用它时,它会返回18446744073709551615或2^64-1.
它似乎并不总是把它还回
我试图从一个大文件的中间删除一行。(>20)。我知道要删除的行开始文件中的位置。
这是我目前所拥有的。
/**
* Removes a line at a position from the file
* @param [int] $position The position at the start of the line to be removed
*/
public function removeLineAt($position)
{
$fp = fopen($this->filepath, "rw+");
fseek($fp, $p
在C或C++中,以下内容可用于返回文件大小:
const unsigned long long at_beg = (unsigned long long) ftell(filePtr);
fseek(filePtr, 0, SEEK_END);
const unsigned long long at_end = (unsigned long long) ftell(filePtr);
const unsigned long long length_in_bytes = at_end - at_beg;
fprintf(stdout, "file size: %llu\n", l
我正在寻找一种跨平台(Windows + Linux)的解决方案来将整个文件的内容读取到char *中。
这就是我现在得到的:
FILE *stream;
char *contents;
fileSize = 0;
//Open the stream
stream = fopen(argv[1], "r");
//Steak to the end of the file to determine the file size
fseek(stream, 0L, SEEK_END);
fileSize = ftell(stream);
fseek(stream, 0L, SEE