Tag: fopen

如果在“a + b”模式下打开文件指针,fseek()会将文件指针移动到文件的开头吗?

我希望使用“a + b”模式打开一个文件,即如果它不存在则会自动创建,但如果是,我不想覆盖它。 我希望能够读取和写入该文件。 该文件是二进制文件,我想在其中保存特定struct记录。 所以我想对我想要的记录执行fseek() ,然后使用fwrite()保存记录。 代码如下所示( MyRecord是struct的typedef ,而FILENAME是文件名的#define ): int saveRecord(MyRecord *pRecord, int pos) { FILE* file = fopen(FILENAME, “a+b”); if (file == NULL) { printf(“Unable to open file %s\n”, FILENAME); return 0; } fseek(file, pos * sizeof(MyRecord), SEEK_SET); fwrite(pRecord, sizeof(MyRecord), 1, file); fclose(file); return 1; } 但是这个代码只是将记录追加到文件的末尾,即使我将pos设置为0.为什么SEEK_SET模式下SEEK_SET不能使用fseek() ? 我知道我可以简单地用“r + b”打开它,如果它失败了用“wb”打开它,但我想知道为什么这不起作用以及为什么用SEEK_SET fseek()将文件指针留在最后。 […]

fopen / fopen_s并写入文件

我在C中使用fopen将输出写入文本文件。 函数声明是( ARRAY_SIZE已经定义了ARRAY_SIZE ): void create_out_file(char file_name[],long double *z1){ FILE *out; int i; if((out = fopen(file_name, “w+”)) == NULL){ fprintf(stderr, “***> Open error on output file %s”, file_name); exit(-1); } for(i = 0; i < ARRAY_SIZE; i++) fprintf(out, "%.16Le\n", z1[i]); fclose(out); } 我的问题: 在使用MVS2008进行编译时,我收到警告:警告C4996:’fopen’:此函数或变量可能不安全。 考虑使用fopen_s代替。 我没有看到关于fopen_s更多信息,以便我可以更改我的代码。 有什么建议? 可以指示fprintf以所需的数字精度将数字写入文件吗? 如果我使用long double那么我认为我的答案是好的,直到小数点后15位。 我对吗?

C – 将结构写入文件(.pcap)

我正在尝试编写.pcap文件,这可以在Wireshark中使用。 为了做到这一点,我有几个结构,我需要写入文件的各种数据类型。 (见代码) 所以,我创建结构实例,填写数据,使用FILE * fp = fopen(“test.pcap”,“w”),然后我不确定如何正确地将它写入文件。 我相信我应该使用memcpy,但我不确定最好的方法。 我过去主要使用C ++库来执行此操作。 有什么建议? typedef struct pcap_hdr_s { uint32_t magic_number; /* magic number */ uint16_t version_major; /* major version number */ uint16_t version_minor; /* minor version number */ int32_t thiszone; /* GMT to local correction */ uint32_t sigfigs; /* accuracy of timestamps */ uint32_t snaplen; /* max […]

从终端读取input.txt文件和output.bmp文件(C编程)

我必须做一个我必须编写C-Programm的任务,它从控制台获取输入文件名作为命令行参数。 它应该将数据从input.txt文件(输入文件具有bmp文件的信息 – 颜色等)移动到生成的output.png文件中。 20个参数代表output.png图像的宽度和高度。 所以控制台请求(在Linux上测试)将如下所示: ./main input.txt output.bmp 20 20 我知道这段代码会读取一个input.txt文件并将其放在屏幕上。 FILE *input; int ch; input = fopen(“input.txt”,”r”); ch = fgetc(input); while(!feof(input)) { putchar(ch); ch = fgetc(input); } fclose(input); 这会(例如)将其写入output.png文件。 FILE *output; int i; output = fopen(“ass2_everyinformationin.bmp”, “wb+”); for( i = 0; i < 55; i++) { fputc(rectangle_bmp[i], output); } fclose(output); 但是这个代码只能工作,如果我直接在代码中硬编码名称,而不是使用命令行参数。 我没有任何线索,如何实现,我也没有在互联网上找到任何有用的信息,也许有人可以帮助我。 问候

fseek vs倒带?

我注意到有两种方法可以返回到文件的开头 FILE *fp = fopen(“test.bin”, “r”) fseek(fp, 0, SEEK_END); rewind(fp); 和 FILE *fp = fopen(“test.bin”, “r”) fseek(fp, 0, SEEK_END); fseek(fp, 0, SEEK_SET); 这些方法之间有什么区别?

C – 使用fopen,fclose,fputc等

我已经让这段代码最终在我的命令行上使用了一个参数,即一个文件供它使用,尽管我设计的代码的概念是使用无限数量的文件。 它的作用是使用包含以空格分隔的单词的X个文本文件,并用\n替换空格,从而创建单词列表。 虽然,它成功地完成了第一个参数,但它只是忽略了第二个参数。 另一个小问题似乎是它最后还打印出一些垃圾信,Y上面有两个点; 我假设一些EOF符号,但我似乎无法阻止这种情况发生! int main(int argc, char** argv) { FILE *fpIn, *fpOut; int i, j; j = 1; char c; char myString[256]; printf(“%d”, argc); printf(“\n”); printf(“The following arguments were passed to main(): “); for(i=1; i<argc; i++) printf("%s ", argv[i]); printf("\n"); while(argc–) { for(i = 1; i < argc; i++) { fpIn = fopen(argv[j], […]

fclose()导致分段错误

我有一个制表符分隔的文本文件,我正在解析。 其第一列包含格式为chrX字符串,其中X表示一组字符串,例如“1”,“2”,……,“X”,“Y”。 当解析文件时,这些都存储在称为chromosome的char* 。 文本文件按字典顺序排在第一列,即,我将有一些以“chr1”开头的行,然后是“chr2”等。 在每个“chrX”条目中,我需要打开与此条目关联的另一个文件: FILE *merbaseIn; // loop through rows… if (chromosome == NULL) openSourceFile(&chromosome, fieldArray[i], &merbaseIn, GENPATHIN); else { if (strcmp(chromosome, fieldArray[i]) != 0) { // new chromosome fclose(merbaseIn); // close old chromosome FILE ptr free(chromosome); // free old chromosome ptr openSourceFile(&chromosome, fieldArray[i], &merbaseIn, GENPATHIN); // set up new chromosome FILE ptr […]

无法使用fopen()打开文件

我一直在尝试打开文件和输出文本,但我一直在收到错误。 所以我想我会从一开始就尝试打开文件。 这是我的代码: #include #include #define CORRECT_PARAMETERS 3 int main(void) { FILE *file; file = fopen(“TestFile1.txt”, “r”); if (file == NULL) { printf(“Error”); } fclose(file); } 当我运行该文件时,“错误”被打印到控制台,就是这样。 TestFile1.txt与我的.exe位于同一位置。 我该如何解决?

为什么’fopen’返回NULL指针?

我正在使用C编程语言编写一个简单的文件分割器/合并程序。 问题是,由于某种原因, fopen返回NULL,因此,我的程序在fwrite语句中崩溃。 我该如何解决? 这是C文件: int SplitFile(char* filename, char* output, size_t size) { char current_file_name[256]; int file_count = 0, i = 0; FILE *file = fopen( filename, “rb” ); printf(“split %s into chunks of %d named\n”, filename, size); if (!file) return E_BAD_SOURCE; else { output = (char *) malloc(size * sizeof(char)); if (output == NULL) […]