Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我可以安全地复制fpos吗?_C_File_Object - Fatal编程技术网

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)并还原到无效位置???否。这是脱机分析。而且不会从文件中删除任何数据。它纯粹是将数据从文件提取到其他文件中。只有整个文件将被删除非常感谢