|
The answer is still yes but you will have to do much more work. If that is your intention I recommend you get a good book to learn fundamentals of Win32 programming from. Trying to figure it out from forums is not going to be very productive.
led mike
|
|
|
|
|
why are junk char(ýýýýÝÝÝÝÝÝÝÝÝa a Pÿ) appended while writing CString to CFile
pls advice..
|
|
|
|
|
possibly specified length of buffer is more than the string length.
post writting code.
|
|
|
|
|
Pls find the code here
strLine.Format("%s %d %d %d",strAbc,dDlgResID,dwData,nCmd);
strLine.TrimRight();
strLine=strLine+"\r\n";
CFile file;
file.Open("c:\\some.txt", CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
file.SeekToEnd();
file.Write(strLine,strLine.GetLength());
|
|
|
|
|
the first param in write() method of CFile need a pointer point to the string, but the given param is not a string , just a CString object, try LPCTSTR operation;
--i'm still alive
|
|
|
|
|
timpa_work wrote: ...try LPCTSTR operation;
That happens automatically.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
This line is your problem:
ptr_Electron wrote: file.Write(strLine,strLine.GetLength());
The first character (or more) of a CString is a length byte(s). You need to get only the data:
file.Write(strline.GetBuffer(strline.GetLength(), strLine.GetLength();
Hope that helps.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
It is not necessary to call GetBuffer() since Write() is not modifying the string.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
In this case, it is - he's using a CFile and writing a CString. Without the GetBuffer, it will write the size of the string as well as the string.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
krmed wrote: Without the GetBuffer, it will write the size of the string as well as the string.
That's what the LPCTSTR operator is for.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
This not necessary, inefficient and leaks memory (where is the call to ReleaseBuffer ?).
Steve
|
|
|
|
|
There is no memory leak - nothing was allocated on the stack. As for ReleaseBuffer, it isn't needed. According to MSDN you must call ReleaseBuffer IF the data has been modified - and it hasn't.
I personally prefer the cast, but was just showing and explaining why the OP was seeing the junk.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
You haven't posted enough code to be certain but GetBuffer should be matched with a call to ReleaseBuffer . Also, as another poster pointed out, since you're not modifying the string the call is not needed; use operator LPTCSTR instead.
Steve
|
|
|
|
|
Well, the code I posted does what the OP was looking for - there isn't more code needed. He simply was writing the string to a file.
As for release buffer, MSDN says
If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CSimpleStringT member methods.
However, in his case, the contents were not changed, thus the call to ReleaseBuffer is not required.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
This is how it should be done:
file.Write(str, str.GetLength()*sizeof(TCHAR));
This is more efficient (no re-allocation), easier to understand and safer (no call to ReleaseBuffer is needed).
Steve
|
|
|
|
|
I tried your code, substituting constants for strAbc , dDlgResID , dwData , and nCmd , and it worked fine. Before calling Write() , use the debugger to verify that strLine contains what you expect.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Basically because you're passing a junk buffer to write operation.
(i.e. post the relevant code)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
no it is along with the valid data and some junk
ÍÍýýýÝÝÝÝÝÝÝÝÝÝÝÝÝa qÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍSearch Location 6001 1243420 1404568
|
|
|
|
|
Try to delete the file and run again your application.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
check whether the file already contains data or the value of strAbc at
strLine.Format("%s %d %d %d",strAbc,dDlgResID,dwData,nCmd);
|
|
|
|
|
well, yes.. it will, because I am always opeing ...appending the new string.. closing
|
|
|
|
|
I mean may be the file already contains the junk data, otherwise strAbc contains junk data. Check whether strAbc contains correct data when you debugged at Format() statement.
|
|
|
|
|
If you are 'dumping' the entire contents of a CString instance to a file, then be aware that the class encapsulates more than just a data buffer with some text in it. It has other data items such as length for example.
|
|
|
|
|
strLine.Format("%s %d %d %d",strAbc,dDlgResID,dwData,nCmd);
strLine=strLine+"\r\n";
CStdioFile file;
file.Open("c:\\kkk.txt", CStdioFile::modeCreate|CStdioFile::modeNoTruncate|CStdioFile::modeReadWrite);
file.SeekToEnd();
file.Write(strLine,strLine.GetLength());
Thanks Friends....above code Did the clean job
|
|
|
|
|
Excellent! Don't listen to those GetBuffer() fanatics
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|