Tag: 文件

在大文件中搜索的最佳方法是什么?

我希望将KMP(或类似)搜索应用于大文件(> 4GB)。 我希望这会给我带来麻烦。我无法将它全部复制到内存中,因为那里没有足够的空间。 我的问题是,进行此搜索的最佳方法是什么? 我应该简单地创建一个FILE *并直接在文件中进行搜索,我应该将块(比如说4k)复制到内存中并搜索那些或者其他东西吗?

从文件中删除记录?

我正在使用文本文件来存储我的数据记录。 数据以下列格式存储。 安东尼| 9876543210 阿扎尔| 9753186420 布兰达| 1234567890 大卫| 1357924680 约翰| 6767676767 成千上万的记录存储在该文件中。 我想删除一个特定的记录,比如“David | 1357924680”。 我正在使用C,如何有效地删除特定记录? 目前我正在使用临时文件通过省略我想要删除的记录将记录复制到该临时文件。 复制到临时文件后,我通过截断原始文件的所有内容将临时文件的内容复制到原始文件。 我不认为我这样做有效。 帮我。

在X中将XImage写入.bmp文件

我正在使用以下代码将XImage写入文件“bitmap0.bmp”但是当我在fedora中使用imageViewer打开新创建的文件时,它会出现“文件过早结束”错误并且不显示任何内容。 有谁可以请指出以下代码中的问题? typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; BITMAPINFOHEADER; void saveXImageToBitmap(XImage *pImage) { BITMAPFILEHEADER bmpFileHeader; BITMAPINFOHEADER bmpInfoHeader; FILE *fp; static […]

如何检查文件是否被锁定?

我有以下代码,我想检查文件是否被锁定。 如果没有,那么我想写信给它。 我通过在两个终端上同时运行它来运行此代码但是我每次都在两个选项卡中都处于“锁定”状态,即使我没有锁定它。 代码如下: #include #include #include int main() { struct flock fl,fl2; int fd; fl.l_type = F_WRLCK; /* read/write lock */ fl.l_whence = SEEK_SET; /* beginning of file */ fl.l_start = 0; /* offset from l_whence */ fl.l_len = 0; /* length, 0 = to EOF */ fl.l_pid = getpid(); /* PID */ fd […]

readdir()32/64兼容性问题

我正试图让一些旧的遗留代码在新的64位系统上运行,而且我现在卡住了。 下面是一个小C文件,我用它来测试当前正在破坏的实际程序中存在的function。 #define _POSIX_SOURCE #include #include #undef _POSIX_SOURCE #include main(){ DIR *dirp; struct dirent *dp; char *const_dir; const_dir = “/any/path/goes/here”; if(!(dirp = opendir(const_dir))) perror(“opendir() error”); else{ puts(“contents of path:”); while(dp = readdir(dirp)) printf(” %s\n”, dp->d_name); closedir(dirp); } } 问题: 操作系统是Red Hat 7.0 Maipo x86_64。 遗留代码是32位,必须保持这种方式。 我已经使用带有g++的-m32标志使程序的编译工作正常。 出现的问题是在运行时, readdir()得到一个64位的inode,然后抛出一个EOVERFLOW错误,当然没有打印出来。 我尝试使用readdir64()代替readdir()取得一些成功。 我不再得到errno EOVERFLOW,并且终端上出现了线条,但文件本身并没有被打印出来。 我假设这是由于缓冲区不是什么直接期望。 我试图使用dirent64来尝试缓解这个问题,但每当我尝试这个时,我得到: test.c:19:22 error: […]

从C中的文件中读取整数

很长一段时间我一直在努力解决这个问题,我猜这是一个非常愚蠢的noob错误,但我无法弄明白。 所以我试图读取一个文件中的整数,然后在其中执行一些操作,为了问题我只是想在这里输出它: FILE * pFile; int number; pFile = fopen (“myfile.txt”,”r”); if (pFile!=NULL) { fscanf(pFile, “%d”, number); fclose (pFile); } printf(“number: %i”, number); return 0; myfile.txt的内容: 123 但是当我运行它时它并没有读它,而是它说 RUN FAILED (exit value 1, total time: 32ms) 感谢您的帮助 编辑:我忘了提,它作为一个字符串,它读取正确的数字,但我不能对它进行任何操作,如果我将数字类型设置为双倍它工作,但输出一些数百万的随机数。 ..

读取C中的二进制文件

假设使用此函数原型编写二进制文件(需要打开以进行读取): void writeBinaryFile ( char *fileName , char *comment , int numberOfDoubles , double *doubles , int numberOfInts , int *ints ) (有关此function的更多详细信息,请参见下面的粘贴) … 我的书面代码只获取.bin文件的第一个字母…… 这是我的function: void readBinaryFile(char *fileName) { FILE *fp; char *ptr; double *ptr1; int *ptr2; ptr=(char*)malloc(sizeof(char)*5); ptr1=(double*)malloc(sizeof(double)*6); ptr2=(int*)malloc(sizeof(int)*6); fp=fopen ( fileName , “rb” ) ; fread(ptr,sizeof(char),11,fp); while(*ptr!=’\0′) { printf(“%c”,*ptr); ptr++; } fclose(fp); […]

为什么不读取正确的整数?

这个问题只是为了澄清为什么没有正确打印正确的输出(年份),给出以下代码。 对于未来的读者,问题是fget()函数读取一个字节,该字节应该是属于年份的字节,导致年份无法正确打印。 这是我的代码Car结构 typedef struct carType Car; struct carType { int vehicleID; char make[20]; char model[20]; int year; int mileage; double cost; Car *next; }; 写入二进制文件的代码 void writeBinFile(Car *headPointer) { char fileName[20]; //prompt user for name of textfile to print to scanf(“%s”, fileName); FILE *ftp; Car *start = headPointer->next; ftp = fopen(fileName, “wb”); char separator […]

需要有关二进制文件的帮助

我在创建一个代码时遇到了问题,该代码创建了一个包含多行的bin文件,每行包含6行值。 例如:我正在做一个小项目,其中每一行都是一个’密码’,所以我的系统将加载这个文件并从中读取所有密码,当它更新等等时我没有实现读取文件的方式但因为我正在努力操纵文件。 这个项目将在linux上运行,具有Raspberry pi的GPIOfunction,所以我使用Visual Studio来创建主代码。 我目前的代码是: #define _CRT_SECURE_NO_WARNINGS #include #include #include char keys[4] = { ‘1’, ‘2’, ‘3’, ‘4’ }; // NOT USING char temp_key[6]; int incl_key() { int i; FILE *fp; char code = “0”; int control = 0; int var_internal = 0; fp = fopen(“keys.bin”, “wb”); if (fp == NULL) { printf(“\n Error […]

XOR在一个非常大的文件上

我想XOR一个非常大的文件(~50 Go)。 更确切地说,我想通过使用密钥3847611839对明文文件的32个字节的每个块进行异或(因为内存不足)并创建(块后块)新的密码文件。 感谢您的任何帮助!!