首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于FileWrite的用法?解决方案

2012-03-18 
关于FileWrite的用法?????BCB中的例子:#includedir.hvoid__fastcallTForm1::Button1Click(TObject*Sende

关于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存的什么,谁也不知道啊

热点排行