Tag: 文件

是否有任何普通的理由使用open()而不是fopen()?

经过相当长的一段时间后,我正在C做一个小项目。 这些碰巧包括一些文件处理。 我在各种文档中注意到有返回FILE *句柄的函数和返回(小整数)描述符的其他函数。 这两组function都提供了我需要的基本服务,所以我使用它并不重要。 但我对collections智慧感到好奇:使用fopen()和朋友,还是open()和朋友更好? 编辑因为有人提到缓冲与未缓冲和访问设备,我应该补充说,这个小项目的一部分将在FUSE下编写用户空间文件系统驱动程序。 因此,文件级访问可以像在“文件”(即图像)上那样容易地在设备(例如CDROM或SCSI驱动器)上。

使用fscanf读取double

我想从文本文件中读取双倍,例如31 39.9316476397222 116.113516352222 我试过了两个,而不是工作。 我只能读取前几个十进制数字例如39.93164而不是39.9316476397222谁知道为什么? 谢谢! int NodeID; double _lat,_long; fscanf (pFile, “%d %lf %lf”, &NodeID,&_lat,&_long); printf (“I have read: %d %f %f\n”, NodeID,_lat,_long); fscanf (pFile, “%d %lf %lf”, &NodeID,&_lat,&_long); printf (“I have read: %d %lf %lf\n”, NodeID,_lat,_long);

将int写入C中的二进制文件时出现问题

我需要使用C的I / O函数将数据写入二进制文件。 以下代码导致运行时exception: #include “stdio.h” int main(int argc,char* argv[]) { FILE *fp = fopen(“path_to_file.bin”,”wb”); if(fp == NULL) { printf(“error creating file”); return -1; } int val = 4; fwrite((const void*)val,sizeof(int),1,fp); fclose(fp); return 0; } 代码在fwrite处死掉。 你能发现我做错了什么吗? 显然,我正试图访问0x0000004或类似的数据。 谢谢 !

读取文件和填充结构

我有一个结构具有以下定义: typedef struct myStruct{ int a; char* c; int f; } OBJECT; 我能够填充此对象并将其写入文件。 但是我无法读取其中的char * c值…在尝试读取它时,它会给我一个分段错误错误。 我的代码有什么问题: //writensave.c #include “mystruct.h” #include #include #define p(x) printf(x) int main() { p(“Creating file to write…\n”); FILE* file = fopen(“struct.dat”, “w”); if(file == NULL) { printf(“Error opening file\n”); return -1; } p(“creating structure\n”); OBJECT* myObj = (OBJECT*)malloc(sizeof(OBJECT)); myObj->a = […]

使用fscanf逐行遍历FILE

好的,我有一个文本文件database.txt。 每行都是具有以下格式的用户 “John Smith”| 4| 80.00| “123 Lollipop Lane”| “New Jersey”| “08080” 当我尝试执行以下操作时: database = fopen(fileName,”r”); while(fscanf(database,”%[^\n]”, buffer) != EOF){ printf(“ATTEMPT TO: Insert user %s\n\n”, buffer); if (insert_Customer(clients, create_Customer(buffer)) < 0){ printf("\nERROR: Failed to insert and create customer %s\n", buffer); } else printf("\nSUCCESS: Inserted Customer %s\n\n", buffer); } 它在第一行运行正常,将ENTIRE行发送到create_Customer(char * buffer)函数。 出于某种原因,我不明白,在第一行后,它不断尝试发送“John Smith”,而不是继续前进到下一行。 我相信我的格式不正确,但我无法弄清楚如何完成我想要完成的工作,这是逐行读取此文件并将每行传递到create_Customer函数。

如何知道另一个函数

我想知道是否有任何方法可以知道当前执行的函数在哪里被调用,这是在什么文件和行中。 我正在使用C语言,我正在寻找类似于__FUNCTION __,__LINE__或__FILE__宏的东西。

使用read()函数从文件读取

我必须编写一个程序,每个程序分别读取数字。 是否可以只读取文件的一行,然后从缓冲区读取一个int ,依此类推,直到文件结束? 很难找到使用读写的好例子。 我的例子是有点工作,但我想阅读,直到它检测到’\n’字符然后将缓冲区转换为int。 #include #include #include #include #include int fd[2]; void readFile(int fd) { unsigned char buffer[10]; int bytes_read; int k=0; do { bytes_read = read(fd, buffer, 10); k++; for(int i=0; i<10; i++) { printf("%c", buffer[i]); } } while (bytes_read != 0); } int tab[50]; int main(int argc, char *argv[]) { if(argv[1] == […]

覆盖到c中的特定行

我有一个大约2000行文本的文件,我在我的程序中生成,每行都有一个员工的信息,它像这样输出 1 1 Isaac Fonseca 58 c 1600 1310.40 6 1 0.22 2164.80 1 2 1 Manuel Gutierrez 22 d 1700 1523.37 4 1 0.13 897.26 1 3 1 Daniel Bernal 34 c 1600 1195.84 2 1 0.26 836.16 1 4 1 Miguel Gonzalez 43 e 1800 1195.84 0 1 0.15 0.00 1 但我每当我编辑员工信息时我都要更新文件,我正在做的是我搜索该行并尝试重写它 我已经看到了有同样问题的人的以下问题,但是当我尝试写入文件时,它总是写入文件的末尾 […]

如何在多个操作系统下获取c中的文件修改时间?

我正在尝试用c编写一个便携式函数,比较2个文件的最后修改时间。 文件很小并且一个接一个地写入,因此我需要比1秒(毫秒)更精细的粒度。 似乎有太多的时间/日期function……

对stricmp的未定义引用

我正在尝试创建一个方法来查找并替换字符串中的字符串,但我似乎在编译时遇到了一些错误。 我能找到一些帮助来弄清楚发生了什么吗? void replaceString(char *find, char *replace) { int len_string,i; char temp[30]; len_string=strlen(find); while(1) { for(i=0;i<len_string;i++) temp[i]=fgetc(edit); temp[i+1]=NULL; /* the stricmp() is used for comparing both string. */ if(stricmp(find,temp)==0) { fprintf(edit,"%s ",replace); fclose(edit); exit(1); } fseek(edit,-(len_string-1),1); } } 我在编译时获得的错误是对stricmp的未定义引用。 我知道这不是正确的编码约定,但编辑(FILE类型的对象)当前是一个全局变量。