Solved

Get trouble while using TFileStream.

Posted on 2001-09-08
6
196 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
Technology Partners: 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

[Webinar] How Hackers Steal Your Credentials

Do You Know How Hackers Steal Your Credentials? Join us and Skyport Systems to learn how hackers steal your credentials and why Active Directory must be secure to stop them. Thursday, July 13, 2017 10:00 A.M. PDT

Question has a verified solution.

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

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
C++ Properties One feature missing from standard C++ that you will find in many other Object Oriented Programming languages is something called a Property (http://www.experts-exchange.com/Programming/Languages/CPP/A_3912-Object-Properties-in-C.ht…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

728 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