C 我可以安全地复制fpos吗?
我正在开发一个日志文件处理程序,并定义了如下结构,以允许存储一些有用的信息来解析文件C 我可以安全地复制fpos吗?,c,file,object,C,File,Object,我正在开发一个日志文件处理程序,并定义了如下结构,以允许存储一些有用的信息来解析文件 struct File { FILE* fp; // File pointer char fname[FILENAME_MAX]; // The file name char mode[4]; // File mode (Only use binary modes 'rb', 'ab', 'wb', 'rb+', 'ab
struct File
{
FILE* fp; // File pointer
char fname[FILENAME_MAX]; // The file name
char mode[4]; // File mode (Only use binary modes 'rb', 'ab', 'wb', 'rb+', 'ab+', 'wb+')
fpos_t pos; // A saved position in the file
fpos_t LineStart; // Position of the start of the line the file pointer is currently on
long LineNum; // Line number the pointer is currently on
};
我在打开文件时设置文件
结构成员,并在使用文件时更新它们。我想使用以下功能来保存和恢复文件的状态
void SaveFilePos(struct File *Source, struct File *Save)
{
[snip]
Save->LineStart = Source->LineStart;
if (fgetpos(Source->fp, Save->pos) != 0)
{
Ferr("file.c:SaveFilePos():fgetpos() failed");
}
[snip]
}
void SetFilePos(struct File *Dest, struct File *Save)
{
[snip]
Dest->LineStart = Save->LineStart;
if (fsetpos(Dest->fp, Save->pos) != 0)
{
Ferr("file.c:SetFilePos():fsetpos() failed");
}
[snip]
}
在恢复文件状态之前,我检查文件名和模式是否相同
我的问题是,我是否可以安全、便携地使用Save->LineStart=Source->LineStart
和Dest->LineStart=Save->LineStart
来保存和恢复fpos\u t
对象
。。。我是否可以安全、便携地使用Save->LineStart=Source->LineStart
和Dest->LineStart=Save->LineStart
保存和还原fpos\u t
对象
你可以。C标准的“库-输入/输出”部分说明:
fpos_t
这是一种完整的对象类型,而不是能够记录指定文件中每个位置所需的所有信息的数组类型
除了数组类型之外的完整对象类型可以通过赋值进行复制。您不担心在保存和恢复位置之间对文件进行更改吗?说。。。当文件有20行时保存位置,然后删除几行(从outisde)并还原到无效位置???否。这是脱机分析。而且不会从文件中删除任何数据。它纯粹是将数据从文件提取到其他文件中。只有整个文件将被删除非常感谢