?
Solved

Get trouble while using TFileStream.

Posted on 2001-09-08
6
Medium Priority
?
197 Views
Last Modified: 2008-02-26
here is a piece of my program for save information to file.
void object::WriteToFile(TFileSream *pFile)
{
...
 pFile->Position=2;
 pFile->Write(Buffer,Num);//int* Buffer
 pFile->Position=2;//for debug
 pFile->Read(Buffer,Num);//for debug
 return;
}
 Statement 3,4 are for debuging consistent between content of buffer before storing and those after storing.

function WriteToFile are called by handler FileSaveExecute() of a menu item.a TFileStream object is created inside FileSaveExecute() useing new,and delete before return from  FileSaveExecute().But the resulting file after called FileSaveExecute() is incorrently(not consistent),
while consistent is got in the debuging.Buffer[1],Buffer[2]....(Num>0)are always 0 in the resulting file except for Buffer[0] which is stored corrently.what wrong with my program?
i plan to use CArchive which is a MFC class instead of TFileStream.Does C++Builder mind?
the version of C++builder is 5.0
 
0
Comment
Question by:Trou
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 6

Expert Comment

by:DrDelphi
ID: 6467753
Try using the Seek method of TFileStream versus setting the Position property. The reason for this is that the linker may sometimes interpet the new Position value to mean "position relative to the current position", whereas Seek's second parameter(origin) tells it explicitly where to begin. Position, while on paper is a write/read property, should really only be used to read the current position from the beginning of the stream.


Good luck!!
 
0
 

Author Comment

by:Trou
ID: 6468122
i now use TFileStream::Seek() to set position instead of setting position
property directly.But the program still runs incorrently with m_pFile->
Write(Buffer,Num).in the resulting file, only the frist item of Buffer[Num] are
stored corrently,and anyother item are stored as 0.

i also try to use the following statement intead of m_pFile->Write(Buffer,Num);
for(int Timer=0;Timer<Num;Timer++)m_pFile->Write(&Buffer[Timer],1);
and get a  resulting file of corrent!
i have no idea now.By the way Buffer[Num] is created using operator new.

0
 
LVL 6

Expert Comment

by:DrDelphi
ID: 6469100
"for(int Timer=0;Timer<Num;Timer++)m_pFile->Write(&Buffer[Timer],1);"

-This gives you an INCREMENTAL write to file.


for(int Timer=0;Timer<Num;Timer++){
 m_PFile->Position=2;
 m_pFile->Write(&Buffer[Timer],1);
}


-This OVERWRITES the beginning of the stream.


-Check your code that you are looping when you try the Seek or set the Position property. My guess is that is where your problem lies.

Good luck!!

0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:Trou
ID: 6484659
OK.i have found out the bug.the secord paramater of TFileStream::Write(void*,int Count)
,Count,is Number of BYTE.And buffer is of type int,for int is 32-bit.The bug in my program is
write 4 int-variables to file with paramater Count=4.so only the frist variable can be wrote to
file.


finally bless you.
0
 
LVL 11

Expert Comment

by:griessh
ID: 6865881
I think you forgot this question. I will ask Community Support to close it unless you finalize it within 7 days. Unless there is objection or further activity,  I will suggest to refund the points and PAQ at zero points since  you found your own solution.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!
======
Werner
0
 
LVL 5

Accepted Solution

by:
Netminder earned 0 total points
ID: 6886909
Per recommendation, points refunded and question closed by
Netminder
Community Support Moderator
Experts Exchange
0

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.
Suggested Courses

801 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question