How to use SEEK_CUR on a FILE*
Asked Answered
G

2

5
offset=ftell(ptr)-sizeof(student1);
fseek(ptr,offset,SEEK_SET);
fwrite(&student1,sizeof(student1),1,ptr);

This C code means move the pointer from the current position ftell(ptr) to start of the just read structure block. Am I right?

If I'm right, can I use SEEK_CUR instead of SEEK_SET to go back to start of the structure block in the file?

Please show me how to use SEEK_CUR and go backward to start of the structure block.

I'm newbie to programming. So please kindly help me.

Edit: Thank you for the answers. What I'm trying to do is to search for a keyword (Roll number of a student) and update this student's information (Name,Address,..). The updated datas are replaced the previous datas successfully. Please let me ask one more question. It there any way to insert the new data above the previous data instead of replacing it with old data?

Gusti answered 11/11, 2012 at 10:52 Comment(1)
Why the downvote? The OP shows effort in the sense of thought, example code and proposes something being unsure about. So for me this looks Ok.Older
K
7

This C code means move the pointer from the current position [ ftell(ptr) ] to start of the just read structure block. Am I right?

I think so.

Please show me how to use SEEK_CUR and go backward to start of the structure block.

You can use a negative offset.

#include <stdio.h>

fseek (ptr, -sizeof student1, SEEK_CUR);

Anyway, you should avoid these calls; it could be very slow. Use rather sequential reading.

Karynkaryo answered 11/11, 2012 at 10:55 Comment(3)
It might be slow indeed. I think they are trying to overwrite part of a file though so it might be better than the alternatives.Simonize
Thank you for the answer. What I'm trying to do is to search for a keyword (Roll number of a student) and update this student's information (Name,Address,..). The updated datas are replaced the previous datas successfully. Please let me ask you one more question. It there any way to insert the new data above the previous data instead of replacing it with old data?Gusti
@Min Naing Oo: With such files, there is no easy manner to do this. However, you can save the previous data, overwrite it with the new one, and then write the saved data.Karynkaryo
A
3

try:

fseek(ptr, -sizeof(student1), SEEK_CUR);
Awe answered 11/11, 2012 at 10:54 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.