Tag: 文件

FILE类型的对象的属性是什么

FILE对象通常是通过调用fopen或tmpfile创建的,它们都返回对这些对象之一的引用。 Struct名为FILE的属性是什么,还是依赖于平台?

在C中写入指向文件的指针

我有一个结构: typedef struct student { char *name; char *surname; int age; } Student; 我需要将它写入二进制文件。 Student *s = malloc(sizeof(*s)); 我用数据填充我的结构,然后我写入文件: fwrite(s, sizeof(*s), 1, fp); 在我的文件中不存在名称和姓氏,它有char *的地址。 我如何写一个单词,而不是一个地址?

在C中,解析一个由多个空格分隔的整数组成的字符串

我试图使用C将包含多行空白分隔整数的文件解析为动态int数组的动态数组。 每行都是数组数组中的数组。 每行中的行数和元素是非常量的。 到目前为止我所做的是使用fgets将每一行作为字符串抓取。 但是,我无法弄清楚如何解析一串空格分隔的整数。 我以为我可以使用sscanf(因为fscanf可以用来解析整个空格分隔的整数文件)。 但是,似乎sscanf具有不同的function。 sscanf只解析字符串中的第一个数字。 我的猜测是,因为该行是一个字符串不是一个流。 我已经四处查找了一种从字符串中创建流的方法,但它看起来并不像C中那样(我无法使用非标准库)。 char* line; char lineBuffer[BUFFER_SIZE]; FILE *filePtr; int value; … while((line = fgets(lineBuffer, BUFFER_SIZE, filePtr)) != NULL) { printf(“%s\n”, lineBuffer); while(sscanf(lineBuffer, “%d “, &value) > 0) { printf(“%d\n”, value); } } 有什么东西可以用来解析字符串。 如果没有,是否有整个系统的替代品? 我宁愿不使用REGEX。

如何在C中逐行读取文件?

我有一个文本文件,最多100个IP地址,每行1个。 我需要将每个地址作为字符串读入名为“list”的数组中。 首先,我假设“list”需要是一个二维char数组。 每个IP地址长度为11个字符,如果包含“\ 0”,则为12个,因此我声明列表如下: char list[100][12]; 接下来,我尝试使用fgets来读取流: for (i = 0; i < 100; i++) { if (feof(stream)) break; for (j = 0; j < 12; j++) fgets(&list[i][j], 12, stream); count++; } 要检查字符串是否已正确读取,我尝试输出它们: for (i = 0; i < 5; i++) { for (j = 0; j < 11; j++) printf("%c", list[i][j]); printf("\n"); } […]

删除c中的文件

如何关闭文件并将其删除? 我有以下代码: FILE *filePtr = fopen(“fileName”, “w”); … 现在我想关闭filePtr并删除文件“fileName”。 我是不是该: fclose(filePtr); remove(“fileName”); 要么: remove(“fileName”); fclose(filePtr); 我先做的事情有关系吗? 谢谢!!

为什么fwrite的写作比我说的要多?

FILE *out=fopen64(“text.txt”,”w+”); unsigned int write; char *outbuf=new char[write]; //fill outbuf printf(“%i\n”,ftello64(out)); fwrite(outbuf,sizeof(char),write,out); printf(“%i\n”,write); printf(“%i\n”,ftello64(out)); 输出: 0 25755 25868 到底是怎么回事? write设置为25755,我告诉fwrite将多个字节写入文件,这是在开头,然后我在25755以外的位置?

获取C中的大文件大小

在有人抱怨“重复”之前,我一直在彻底检查SO,但似乎还没有干净的答案,尽管问题看起来很简单。 我正在寻找一个可移植的C代码 ,它能够提供文件的大小,即使这样的文件大于4GB。 通常的方法(fseek,ftell)工作正常,只要文件仍然<2GB。 它在各处得到了相当好的支持,所以我试图找到相同的东西。 不幸的是,所有编译器都不支持更新的方法(fseeko,ftello)。 例如,MinGW错过了它(显然是MSVC)。 此外,一些评论让我相信新的返回类型(off_t)不一定支持> 2GB的大小,它可能依赖于一些外部参数来进行检查。 MSVC不支持明确的方法(fseeko64,ftello64)。 MS提供等效的_fseeki64和_ftelli64。 这已经很糟糕,但它变得更糟:一些Linux配置似乎在运行时严重支持这些function。 例如,我在PowerPC上的Debian Squeeze,使用GCC 4.4,将使用fseeko64产生一个“filesize”方法,它始终返回0(虽然它适用于Ubuntu64)。 MinGW似乎回答了2GB以上的随机垃圾。 好吧,就可移植性而言,我有点无能为力。 如果我需要制作一堆#if #else,那么为什么不首先直接使用OS和编译器细节方法,例如用于MSVC的GetFileSize()。

如何以可移植的方式检查C ++中是否存在文件?

目前,我使用此代码检查Windows和POSIX兼容的操作系统(Linux,Android,MacOS,iOS,BlackBerry 10)上是否存在文件: bool FileExist( const std::string& Name ) { #ifdef OS_WINDOWS struct _stat buf; int Result = _stat( Name.c_str(), &buf ); #else struct stat buf; int Result = stat( Name.c_str(), &buf ); #endif return Result == 0; } 问题: 这段代码有什么缺陷吗? (也许是一个无法编译的操作系统) 是否可以仅使用C / C ++标准库以真正可移植的方式进行? 如何改进? 寻找规范的例子。

在C中确定文件类型

我正在使用Linux机器上的C程序,该程序显示作为程序参数的文件的文件类型。 程序需要确定文件是否是以下任何一个:目录,设备,(常规)文件,链接,套接字或fifo。 我不确定如何确定文件类型。 到目前为止,这是我的代码(不多): int main(int argc, char **argv) { if( argc == 1 ) /* default: current directory */ puts(“Directory”); else while( –argc > 0 ) determine_ftype(*++argv); return 0; } 谢谢!

在C中处理多字节(非ASCII)字符

我正在尝试自己的版本的wc(unixfilter),但我有非ASCII字符的问题。 我做了一个文本文件的HEX转储,发现这些字符占用多个字节,所以它们不适合char。 有什么方法我怎么能从文件中读取这些字符并像C一样处理它们(所以我可以计算文件中的字符)? 我一直在谷歌搜索并找到一些wchar_t类型,但没有任何简单的例子如何将它与文件一起使用。