var
    iFileHandle: Integer;
    ConnectionStr:WideString;
begin
    ConnectionStr:=SPSADOConnection.ConnectionString; //把数据库连接字符串值赋给connectstr
    if FileExists('Config.dat') then
        DeleteFile('Config.dat');    iFileHandle:=FileCreate('Config.dat');
    if FileWrite(iFileHandle,ConnectionStr,//我想错误是不是因为ConnectionStr是var,而filewrite的第二个参数是const?
        Length(SPSADOConnection.ConnectionString))=-1 then
   .....................请教一下各位,很急的!

解决方案 »

  1.   

    FileWrite(iFileHandle,ConnectionStr[1],.....
      

  2.   

    打开文件应该是乱码,你要用FileRead读出来才可以的,不能用记事本打开的
      

  3.   

    function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer;
    因为第二个参数是buffer啊,其实就是要传入一个缓冲区的首地址
      

  4.   

    zfpcb(我是你的传说):
       我的程序是在以上代码中实现对文件的写,然后另外一段代码实现对文件的读,即读出文件中的字符串,赋到TADOConnection.Connectstring中,如果象你说那样没问题,那说明是在读文件的时候出了问题,代码如下:
    var
        iFileHandle: Integer;
        iFileLength: Integer;
        ConnectionStrBuf:PChar;
    ..........
                   ConnectionStrBuf:=PChar(AllocMem(iFileLength+1));
                   FileRead(iFileHandle, ConnectionStrBuf^, iFileLength);
                   FileClose(iFileHandle);
                   SPSADOConnection.ConnectionString:= ConnectionStrBuf;               showmessage(SPSADOConnection.ConnectionString);//这里发现了只赋了一个字符
    ..........我想ConnectionStrBuf是PChar型,怎么才能把它的内容赋给一个widestring型?
      

  5.   

    如果把FileRead(iFileHandle, ConnectionStrBuf^, iFileLength);改成   FileRead(iFileHandle, ConnectionStrBuf, iFileLength),就会弹出信息窗口:"access violation at...;write of address ..."
      

  6.   

    改为如下就可以了:
    FileWrite(iFileHandle,ConnectionStr[1],
          Length(ConnectionStr)*2);

    FileWrite(iFileHandle,PChar(ConnectionStr)^,
              Length(ConnectionStr)*2);
    注意WideString在求长度的时候要乘2,这个不难理解吧?