可能重复:
如何确定C中文件的大小?
如何找出用C语言编写的应用程序打开的文件大小?我想知道大小,因为我想把加载文件的内容放入一个我分配的字符串中malloc().只是写作malloc(10000*sizeof(char));是恕我直言,一个坏主意.
我今天遇到了一个令人讨厌的错误,其中一个字符串(存储为char [])将在末尾打印为垃圾。假定要打印的字符串(使用arduino打印/写入功能)是正确的(正确包含了\ r和\ n)。但是,最后会打印垃圾。
然后,我分配了一个额外的元素来在“ \ r”和“ \ n”(这是要打印的字符串中的最后两个字符)之后存储一个“ \ 0”。然后,print()正确打印了字符串。似乎使用'\ 0'表示print()函数该字符串已终止(我记得在Kernighan的C语言中阅读过此内容)。
这个错误出现在我的从文本文件读取的代码中。在我设计代码时,我完全没有遇到“ \ 0”。这使我相信'\ 0'在文本编辑器中没有实际使用,仅由打印功能使用。它是否正确?
我已经有了如何从一开始就将一个文件复制到另一个文件,但是我如何修改程序以相反的顺序复制它?源文件应具有读访问权和目标文件读写执行权.我必须使用文件控制库.
例如
FILE A File B should be
|---------| |----------|
|ABCDEF | |FEDCBA |
|---------| |----------|
Run Code Online (Sandbox Code Playgroud)
*********************更新**********
感谢MikeNakis的提示和建议,Sangeeth为您的代码
我已经重做了代码,现在它是以反向顺序打印文件大小的复制字节
这是代码
#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<sys/stat.h>
#include<unistd.h>
int main(int argc, char *argv[]) {
int source, dest, n;
char buf;
int filesize;
int i;
if (argc != 3) {
fprintf(stderr, "usage %s <source> <dest>", argv[0]);
exit(-1);
}
if ((source = open(argv[1], …Run Code Online (Sandbox Code Playgroud) 1-我想知道,如果我尝试读取大于2GB大小的文件而不使用该选项-D_FILE_OFFSET_BITS=64使用off_t和使用此页面上的第二个功能编译我的程序,会出现什么问题?它会段错吗?
2-我打算用和实现这个实现off64_t
#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64
Run Code Online (Sandbox Code Playgroud)
会有问题吗?
在C中,我们可以使用fseek()函数找到文件的大小.喜欢,
if (fseek(fp, 0L, SEEK_END) != 0)
{
// Handle repositioning error
}
Run Code Online (Sandbox Code Playgroud)
所以,我有一个问题,是否建议使用fseek()和计算文件大小的方法ftell()?
我想检查我的文本文件是否包含数据.如果文件包含我想要读取的数据.我的问题是我不知道在if语句中写入的正确条件.提示:我试图使用fseek&ftell的功能,但没有任何好处.我想知道为什么if语句中的这个条件不能正常工作?
FILE *fptr;
if(ftell(fptr)!=0){ //check if the file is not empty.
if ( !( fptr = fopen( "saving.txt", "r" ))){
printf( "File could not be opened to retrieve your data from it.\n" );
}
else{
while ( !feof( fptr ) ){
fscanf( fptr, "%f\n", &p.burst_time );
AddProcess(&l,p.burst_time);
}
fclose( fptr );
}
}
Run Code Online (Sandbox Code Playgroud) 我只是有一个关于如何获取包含十六进制数字的文件长度的快速问题.例如:
724627916C
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一方法是将十六进制值转换为二进制:
724627916C => 0111001001000110001001111001000101101100
Run Code Online (Sandbox Code Playgroud)
然后计算二进制值的位数.只是想知道这是否正确?谢谢
我正在进行socket编程中的一项任务,我必须在sparc和linux机器之间发送一个文件.在char流中发送文件之前,我必须获取文件大小并告诉客户端.以下是我试图获得尺寸的一些方法,但我不确定哪一个是正确的.
出于测试目的,我创建了一个内容为"test"的文件(空格+(字符串)测试)
方法1 - 使用fseeko()和ftello()
这是我在https://www.securecoding.cert.org/confluence/display/c/FIO19-C.+Do+not+use+fseek()+and+ftell()+to+compute+上找到的方法.+大小+ + a +常规+文件 虽然fssek()有一个问题"将文件位置指示器设置为文件结尾,与fseek(文件,0,SEEK_END)一样,但是对于二进制文件有未定义的行为stream",fseeko()据说解决了这个问题,但它只适用于POSIX系统(这很好,因为我使用的环境是sparc和linux)
fd = open(file_path, O_RDONLY);
fp = fopen(file_path, "rb");
/* Ensure that the file is a regular file */
if ((fstat(fd, &st) != 0) || (!S_ISREG(st.st_mode))) {
/* Handle error */
}
if (fseeko(fp, 0 , SEEK_END) != 0) {
/* Handle error */
}
file_size = ftello(fp);
fseeko(fp, 0, SEEK_SET);
printf("file size %zu\n", file_size);
Run Code Online (Sandbox Code Playgroud)
此方法工作正常,并正确获得大小.但是,它仅限于常规文件.我试图谷歌术语"常规文件"但我仍然不太了解它.我不知道这个功能对我的项目是否可靠.
方法2 - 使用strlen()
自从最大 我的项目中的文件大小是4MB,所以我可以只调用一个4MB的缓冲区.之后,文件被读入缓冲区,我尝试使用strlen来获取文件大小(或更正确的内容长度).由于strlen()是可移植的,我可以使用这种方法吗?代码片段是这样的
fp = fopen(file_path, "rb");
fread(file_buffer, 1024*1024*4, 1, …Run Code Online (Sandbox Code Playgroud) 我正在学习如何用 C 编写和读取文件,并且我使用此代码编写了一篇文本
\n FILE *f = fopen("testingText.txt", "w");\n char *text = "This is text1...";\n fwrite(text, sizeof(char), strlen(text), f );\n fclose(f);\nRun Code Online (Sandbox Code Playgroud)\n当我读取该文件的内容并使用此代码打印它时
\n FILE *f = fopen("testingText.txt", "r");\n fseek(f, 0, SEEK_END);\n unsigned int size = ftell(f);\n fseek(f , 0, SEEK_SET);\n char *content = (char *)malloc(size);\n\n fread(content, sizeof(char), size, f);\n printf("File content is...\\n%s", content);\n\n\n free(content);\n fclose(f);\nRun Code Online (Sandbox Code Playgroud)\n它给出了像这样奇怪的事情的结果
\n文件内容是...\n这是text1...Path=C:* \xe2\x94\xac#\xc3\xa6\xe2\x95\xa9e\xc3\xb2 *
\n当我再次运行代码时,它给出了不同的奇怪的东西。
\n我知道在 C++ 中,你可以检查字符串的长度,但在 C 中,没有那么多。
是否可以知道文本文件的文件大小,以了解文件中有多少个字符?
是每个字符一个字节还是其他标题是否秘密存储,无论我是否设置它们?
出于性能原因,我想避免在遍历文件时对每个字符执行空检查。
谢谢。