这段代码哪有错?关与FILEWRITE() (50分)

  • 主题发起人 主题发起人 BuddyWang
  • 开始时间 开始时间
B

BuddyWang

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TfrmGenTracePage.CreateSysiniFile;
var
FN,str:String;
FileHandle: Integer;
begin
FN:='sys.ini';
if FileCreate(FN)=-1 then
raise Exception.Create('无法创建文件:'+FN);
FileHandle:=FileCreate(FN);
str:='[main]';
FileWrite(FileHandle,str,SizeOf(str));
str:='Directory=';
FileWrite(FileHandle,str,SizeOf(str));
FileClose(FileHandle);
end;

文件SYS.ini能够创建,但是写入不了内容,为什么!
 
procedure TfrmGenTracePage.CreateSysiniFile;
var
FN,str:String;
FileHandle: Integer;
begin
FN:='sys.ini';
FileHandle:=FileCreate(FN);
if FileHandle =-1 then
raise Exception.Create('无法创建文件:'+FN);
str:='[main]';
FileWrite(FileHandle,str,Length(str));
str:='Directory=';
FileWrite(FileHandle,str,Length(str));
FileClose(FileHandle);
end;

按照DELPHI的写法应该是正确的,和DELPHI例子相同,但是工作也不正常
错误应该是DELPHI的FILEWRITE里面,而且DELPHI不推荐用该方式。
你如果写INI文件可以用TINIFILE来写
 
应该这样的 FileWrite(FileHandle,str[1],Length(str));
 
如果想创建INI文件的话,可以用TIniFile啊,何必要自己创建呢。
 
TIniFile会帮你做好一切,建议用TIniFile的说
 
同意wuwo和教父.
以前也碰到过类似的写文件问题,主要是受C的影响,
在C里,传给_write的buffer本身就是指针,
而在delphi的filewrite中却是要求一个变量,然后才把这个变量的地址传给API的write.
对string类型,要把字符串写到文件里,可以用
var str1:string;
...
filewrite(handle,str1[1],length(str1));

对pchar的类型,可以
var p:pchar;
...
filewrite(handle,p[0],length(p));

对Delphi里的其他类型变量,基本可以这样
var sometype:....

filewrite(handle,sometype,sizeof(sometype));

对普通的变量数组,
var someArr:Array[0..MaxArrCount-1] of ....
以下两种写法都可以

filewrite(handle,someArr[0],sizeof(someArr[0])*MaxArrCount);

filewrite(handle,someArr,sizeof(someArr[0])*MaxArrCount);

如果要写完文件后截断文件,可以用
SetEndOfFile(handle);


话说回头,写INI文件用Tinifile是很方便的





 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
698
import
I
后退
顶部