Solved

Get trouble while using TFileStream.

Posted on 2001-09-08
6
191 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
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Quicksort a dynamic deque 33 66
returning a dereferenced pts in C++ 10 141
How to programmatically differentiate between C and Java 10 188
Add values of each row in an array 3 50
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…
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

930 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now