FileToGrid (C++)
From RAD Studio Code Examples
Language:
Description
The following example uses a button, a string grid, and an Open dialog box on a form. When you click the button, you are prompted for a file name. When you click OK,the specified file is opened, read into a buffer, and closed. Then the buffer is displayed in two columns of the string grid. The first time you use this application, you should do a "Fill Grid" and then a "Write Grid to File". Always use files generated like this to do a "Read File into Grid".
Read File to Grid
Code
void __fastcall TForm1::Button1Click(TObject *Sender) { int iFileHandle; int iFileLength; int iBytesRead; int iLength; int count; wchar_t *pszBuffer; if (OpenDialog1->Execute()) { try { iFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead); iFileLength = FileSeek(iFileHandle,0,2); FileSeek(iFileHandle,0,0); iBytesRead = FileRead(iFileHandle, &count, 4); StringGrid1->ColCount = count; iBytesRead = FileRead(iFileHandle, &count, 4); StringGrid1->RowCount = count; for (int x = 0; x < StringGrid1->ColCount; x++) { for (int y = 0; y < StringGrid1->RowCount; y++) { // Write out the length of each string, followed by the string itself. FileRead(iFileHandle, &iLength, 4); pszBuffer = new wchar_t[iLength + 1]; FileRead(iFileHandle, pszBuffer, iLength*sizeof(wchar_t)); pszBuffer[iLength] = 0; StringGrid1->Cells[x][y] = pszBuffer; delete [] pszBuffer; } } FileClose(iFileHandle); delete [] pszBuffer; } catch(...) { #if defined(_DELPHI_STRING_UNICODE) Application->MessageBox( L"Can't perform one of the following file operations: Open, Seek, Read, Close.", L"File Error", IDOK); #else Application->MessageBox( "Can't perform one of the following file operations: Open, Seek, Read, Close.", "File Error", IDOK); #endif } } } // Write Grid into File #include <dir.h> void __fastcall TForm1::Button2Click(TObject *Sender) { wchar_t szFileName[MAXFILE+4]; int iFileHandle; int iLength; int count; if (SaveDialog1->Execute()) { if (FileExists(SaveDialog1->FileName)) { _wfnsplit(SaveDialog1->FileName.c_str(), 0, 0, szFileName, 0); wcscat(szFileName, L".BAK"); //Removing previously created .BAK files, if found if (FileExists(szFileName)) { DeleteFileW(szFileName); } RenameFile(SaveDialog1->FileName, szFileName); } iFileHandle = FileCreate(SaveDialog1->FileName); // Write out the number of rows and columns in the grid. count = StringGrid1->ColCount; FileWrite(iFileHandle, &count, sizeof(count)); count = StringGrid1->RowCount; FileWrite(iFileHandle, &count, sizeof(count)); for (int x=0;x<StringGrid1->ColCount;x++) { for (int y=0;y<StringGrid1->RowCount;y++) { // Write out the length of each string, followed by the string itself. iLength = StringGrid1->Cells[x][y].Length(); FileWrite(iFileHandle, (wchar_t *)&iLength, sizeof(iLength)); FileWrite(iFileHandle, StringGrid1->Cells[x][y].w_str(), StringGrid1->Cells[x][y].Length()*sizeof(wchar_t)); } } FileClose(iFileHandle); } }
Uses
- System.SysUtils.FileExists ( fr | de | ja )
- System.SysUtils.FileOpen ( fr | de | ja )
- System.SysUtils.FileSeek ( fr | de | ja )
- System.SysUtils.FileRead ( fr | de | ja )
- System.SysUtils.FileWrite ( fr | de | ja )
- System.SysUtils.FileClose ( fr | de | ja )