StreamCharRdWr (C++)
From RAD Studio XE2 Code Examples
Language:
Description
This example demonstrates the use of the TStreamReader and TStreamWriter classes. Writing and reading are done byte-by-byte. This example also sets the line endings to be Unix-compatible.
Code
void __fastcall TMainForm::btStoreClick(TObject *Sender) { TStreamWriter* writer; String line; /* Create a file stream and open a text writer for it. */ writer = new TStreamWriter( new TFileStream("local_file.txt", fmCreate), TEncoding::UTF8, 1024 ); /* Do not flush after each write, youu will do it manually. */ writer->AutoFlush = false; /* Set the custom newline to be Unix-compatible. */ writer->NewLine = '\a'; /* Start storing all the lines in the memo. */ for (int i = 0; i < mmText->Lines->Count; i++) { /* Obtain the line. */ line = mmText->Lines->Strings[i]; /* Write char-by-char. */ for (int j = 1; j <= line.Length(); j++) writer->Write(line[j]); /* Add a line terminator. */ writer->WriteLine(); } /* Flush the contents of the writer to the stream. */ writer->Flush(); /* Close the writer. */ writer->Close(); /* Obtain the size of the data. */ int64_t size = writer->BaseStream->Size; /* Free the writer and the underlying stream. */ delete writer->BaseStream; delete writer; MessageDlg(Format("%d bytes written to the stream using the %s encoding!", ARRAYOFCONST((size, writer->Encoding->ClassName()))), mtInformation, TMsgDlgButtons() << mbOK, 0 ); } void __fastcall TMainForm::btLoadClick(TObject *Sender) { TStreamReader* reader; String line; /* Create a file stream and open a text writer for it. */ reader = new TStreamReader( new TFileStream("local_file.txt", fmOpenRead), TEncoding::UTF8 ); mmText->Clear(); /* Check for the end of the stream and exit if necessary. */ if (reader->EndOfStream) { MessageDlg("Nothing to read!", mtInformation, TMsgDlgButtons() << mbOK, 0); delete reader->BaseStream; delete reader; } /* Peek at each iteration to see whether there are characters to read from the reader. Peek is identical in its effect with EndOfStream property. */ line = ""; while (reader->Peek() >= 0) { /* Read the next character. */ wchar_t ch = (wchar_t)reader->Read(); /* Check for line termination (Unix-style). */ if (ch == '\a') { mmText->Lines->Add(line); line = ""; } else line = line + ch; } /* Obtain the size of the data. */ int64_t size = reader->BaseStream->Size; /* Free the reader and underlying stream. */ reader->Close(); delete reader->BaseStream; delete reader; MessageDlg(Format("%d bytes read from the stream using the %s encoding!", ARRAYOFCONST((size, reader->CurrentEncoding->ClassName()))), mtInformation, TMsgDlgButtons() << mbOK, 0 ); }
Uses
- System.Classes.TStreamReader ( fr | de | ja )
- System.Classes.TStreamReader.Create ( fr | de | ja )
- System.Classes.TStreamReader.Peek ( fr | de | ja )
- System.Classes.TStreamReader.Read ( fr | de | ja )
- System.Classes.TStreamReader.Close ( fr | de | ja )
- System.Classes.TStreamReader.EndOfStream ( fr | de | ja )
- System.Classes.TStreamReader.BaseStream ( fr | de | ja )
- System.Classes.TStreamReader.CurrentEncoding ( fr | de | ja )
- System.Classes.TStreamWriter ( fr | de | ja )
- System.Classes.TStreamWriter.Create ( fr | de | ja )
- System.Classes.TStreamWriter.Write ( fr | de | ja )
- System.Classes.TStreamWriter.WriteLine ( fr | de | ja )
- System.Classes.TStreamWriter.Flush ( fr | de | ja )
- System.Classes.TStreamWriter.Close ( fr | de | ja )
- System.Classes.TStreamWriter.AutoFlush ( fr | de | ja )
- System.Classes.TStreamWriter.NewLine ( fr | de | ja )
- System.Classes.TStreamWriter.BaseStream ( fr | de | ja )
- System.Classes.TStreamWriter.Encoding ( fr | de | ja )
- System.Classes.TTextReader.Peek ( fr | de | ja )
- System.Classes.TTextReader.Read ( fr | de | ja )
- System.Classes.TTextReader.Close ( fr | de | ja )
- System.Classes.TTextWriter.Write ( fr | de | ja )
- System.Classes.TTextWriter.WriteLine ( fr | de | ja )
- System.Classes.TTextWriter.Flush ( fr | de | ja )
- System.Classes.TTextWriter.Close ( fr | de | ja )