Tag: file

C编程中的Hex文件读取?

我有一个问题: 我正在编写的ac程序,其function与hex编辑器非常相似。 我想接收一个文件并查看其hex值。 例如,假设我的文本文件“helloworld.txt”只有“Hello World!”字样。 在其中,我想指定程序获取该文件,读取其hex值(同样该文件是一个简单的.txt文件,而不是二进制文件)并将其存储在一个数组中供以后使用。 这是我到目前为止: #include #include int main() { char ch, file_name[25]; FILE *fp; printf(“Enter the name of file you wish to see\n”); gets(file_name); fp = fopen(file_name,”rb”); // read binary mode if( fp == NULL ) //error checking { perror(“Error while opening the file.\n”); exit(EXIT_FAILURE); } printf(“The contents of %s file are […]

fopen:保持开放或使用缓冲区是个好主意吗?

所以我有很多需要写的日志文件。 它们在程序开始时创建,并在程序关闭时保存到文件。 我想知道它是否更好: fopen()在程序开始时,然后在程序结束时关闭文件 – 我只需要在需要时写入文件。 这些文件是否仍然“开放”会减慢任何事情(例如其他文件io)吗? 要么 我将需要写入的内容保存到缓冲区中,然后打开文件,从缓冲区写入,在程序结束时关闭文件。 我想这会更快?

C中fprintf的通用参数

我正在编写一个函数,使用fprintf函数将数据保存到C中的文件中。 但是,这需要占位符作为其参数之一。 例如:%s表示字符串,%d表示整数…如果数据类型是通用的,我该怎么办,也就是说,使用此函数的程序员可以将我写入文件的变量的数据类型设置为任何内容他要? 谢谢!

在C中使用fread和fwrite的问题

以下是我的代码,将一些硬编码的int值(1,2,3,4,5)写入文件,关闭该文件,在读取模式下打开同一文件并读取写入的元素。 从输出中看到fwrite正常发生但fread无法正确读取。 #include int main() { FILE *fptr; FILE *optr; const char *filepath = “E:\\testinput.txt”; int buf[5]={1,2,3,4,5}; int obuf[5]; int value; int *ptr = &value; int num_bytes_read; int no_of_iterations; int i; int ret;//return value for fwrite int count = 0; no_of_iterations = 5; //open the file fptr = fopen(filepath, “wb”); if(fptr == NULL){ printf(“error in […]

同步写入使用FILE_FLAG_OVERLAPPED打开的文件

我已经打开了一个文件 HANDLE handle= CreateFileW( fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); 然后,文件句柄用于异步读取操作: ReadFile(handle, buffer, 1, NULL, &overlapped); 这很有效。 但是,我现在想要进行同步写入。 WriteFile文档说明了这一点 如果使用FILE_FLAG_OVERLAPPED打开hFile,则以下条件有效: •lpOverlapped参数必须指向有效且唯一的OVERLAPPED结构,否则该函数可能会错误地报告写操作已完成。 省略lpOverlapepd参数时, GetLastError()返回ERROR_INVALID_PARAMETER 。 打开两个句柄,一个用于读取,一个用于写入也不起作用,因为第二个句柄产生ERROR_ACCESS_DENIED错误。 如何打开异步读取和同步写入的文件? 我不想不必要地增加代码复杂性。

char *或char **可以伪装成FILE *吗?

在C中,我经常希望以相同的方式处理从文件读取的数据和从字符串数组中读取的数据。 通常从文件读取是用于生产,而字符串用于测试。 我最后写了很多像这样的代码: void handle_line(char *line, Things *things) { … } Things *read_from_chars(char *lines[]) { Things *things = Things_new(); for (int i = 0; lines[i] != NULL; i++) { handle_line(lines[i], things); } return things; } Things *read_from_input(FILE *input) { char *line = NULL; size_t linelen = 0; Things *things = Things_new(); while (getline(&line, &linelen, input) […]

在C中重定向stdout时的奇怪行为

我正在尝试将stdout重定向到一个文件,然后在C中将其恢复为原始文件,但我面临以下奇怪的问题 – 下面的代码片段成功写入 in stdout in stdout 在stdout和相应in file中的文件中都可以。 #include #include #include #define STDOUT 1 int main(int argc, char* argv[]){ printf(“in stdout \n”); int old_out = dup(STDOUT); close(STDOUT); int fd = open(“./redirected”,O_CREAT|O_RDWR|O_TRUNC,0777); printf(“in file \n”); close(fd); dup(old_out); printf(“in stdout\n”); return EXIT_SUCCESS; } 但是,删除我的主要function的第一行: #include #include #include #define STDOUT 1 int main(int argc, char* argv[]){ int […]

为什么读取数据块比在文件I / O中逐字节读取更快

我注意到,逐个读取文件比使用fread读取文件需要更多时间来读取整个文件。 根据cplusplus : size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); 从流中读取一个count元素数组,每个元素的大小都是字节size ,并将它们存储在ptr指定的内存块中。 Q1)因此,再次fread读取文件1个字节,所以它不是以1字节方法读取的方式吗? Q2)结果certificate,仍然可以花费更少的时间。 从这里 : 我使用大约44兆字节的文件作为输入运行它。 使用VC ++ 2012编译时,我得到以下结果: 使用getc计数:400000时间:2.034 使用fread数:400000时间:0.257 SO上的post也很少谈论它取决于操作系统。 Q3)操作系统的作用是什么? 为什么会如此以及幕后背后到底是什么?

如何在标准C / C ++中获取文件分隔符号:/或\?

我想写一个函数: inline char separator() { /* SOMETHING */ } 在标准C / C ++ / C ++ 11中返回系统的文件分隔符? (我的意思是斜杠或反斜杠取决于系统)。 有没有办法实现这个目标?

如何使用fwrite将结构写入文件?

我对C很新,我遇到了fwrite问题。 我想使用一个包含两个值的结构: struct keyEncode{ unsigned short key[2]; unsigned short encoded[2]; }; 然后我在我的main中声明我的struct和指向该struct的指针: struct keyEncode keynEncode; struct keyEncode *storedVal = &keynEncode; 然后我为结构赋值,并希望使用fwrite将结构写入文件: keynEncode.key[0] = k1[0]; keynEncode.key[1] = k1[1]; keynEncode.encoded[0] = p[0]; keynEncode.encoded[1] = p[1]; // i tried to use storedVal.key[0] = k1[0]; but i was getting compile errors fwrite(storedVal, sizeof(storedVal), 0xffff, fp); 现在我的问题是fwrite没有写任何文件。 我哪里错了?