关于FileWrite的用法?????
BCB中的例子:
#include <dir.h>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char szFileName[MAXFILE+4];
int iFileHandle;
int iLength;
if (SaveDialog1-> Execute())
{
if (FileExists(SaveDialog1-> FileName))
{
fnsplit(SaveDialog1-> FileName.c_str(), 0, 0, szFileName, 0);
//fnsplit的用法,能说一下吗??
strcat(szFileName, ".BAK ");
RenameFile(SaveDialog1-> FileName, szFileName);
}
iFileHandle = FileCreate(SaveDialog1-> FileName);
// Write out the number of rows and columns in the grid.
//以下两句特别不懂,(char*)&(StringGrid1-> ColCount)是什么语法?FileWrite函数怎么用????
FileWrite(iFileHandle, (char*)&(StringGrid1-> ColCount), sizeof(StringGrid1-> ColCount));
FileWrite(iFileHandle, (char*)&(StringGrid1-> RowCount), sizeof(StringGrid1-> RowCount));
//以上两句特别不懂,(char*)&(StringGrid1-> ColCount)是什么语法?
(char*)&(int)是类型转换吧,中间的&取地址的意思吧?然后把int类型的指针转化为char类型的指针?不明白这个参数的意思?FileWrite函数怎么用????FileWrite的函数原型如下。const void *Buffer声明的Buffer是指向任意常量的任意指针。FileWrite不是把东西写到iFileHandle指定的文件夹吗?第二个参数应该应该指定的是要写得初始位置吧。那么为什么是一个这样的地址。能否解释一下FileWrit函数。
extern PACKAGE int __fastcall FileWrite(int Handle, const void *Buffer, unsigned 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, (char*)&iLength, sizeof(iLength));//同样的问题
FileWrite(iFileHandle, StringGrid1-> Cells[x][y].c_str(), StringGrid1-> Cells[x][y].Length());
}
}
FileClose(iFileHandle);
}
}
[解决办法]
(char*)&(StringGrid1-> ColCount) 就是列数的字符串,
比如列是100那么这句话结果就是"100";
取到这个变量的所在地址X,X存放的是100,所以取到的是"100";
如果不加&符号,也就是这样(char*)(StringGrid1-> ColCount)
那么就是取内存地址100的那个字符串了,100存的什么,谁也不知道啊