Array of Char(50)

B

bearyan

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎么解决???运行是总是提示出错var CB_FromF : File;
UniCode : String;
CB_NumRead : Integer;
CB_Buf : Array{[1..10240]} of Char;
i : Word;
begin
AssignFile(CB_FromF,'11');
Reset(CB_FromF,1);
Repeat BlockRead(CB_FromF,CB_Buf,SizeOf(CB_Buf),CB_NumRead);
For i := 1 To CB_NumReaddo
Unicode := CB_Buf;
Until (CB_NumRead = 0);
CloseFile(CB_FromF);
end;
解决问题,立刻给分!注:我的程序段是参考别人的,我的用意是从硬盘中读取指定的数据文件,然后将这个文件发送到端口进行打印;由于端口打印部分的程序段已经完成且使用了,但是就是读取这部分总是出错,因此我上来求助一下下;对于Vsun的答案,是能够读入,但是例如我的文件是120字节,但是实际读入UniCode的数据却只为4个字节???为什么???如何解决???
 
T

Tuatara

Unregistered / Unconfirmed
GUEST, unregistred user!
先用setlength为数组分配内存。
 
P

programsky

Unregistered / Unconfirmed
GUEST, unregistred user!
Unicode := CB_Buf;这句要改成unicode:=unicode+CB_Buf;还有就是动态数组必须使用setlength分配内存
 
V

Vsun

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道你这个程序是个什么样的思路,很不懂,只帮你改错,别的不管var CB_FromF : File;
UniCode : String;
CB_NumRead : Integer;
CB_Buf : Array{[1..10240]} of Char;
i : Word;
begin
AssignFile(CB_FromF,'11');
Reset(CB_FromF,1);
SetLength(CB_Buf,FileSize(CB_FromF));
BlockRead(CB_FromF,[red]CB_Buf[0],[/red]SizeOf(CB_Buf),CB_NumRead);
[red]Unicode:= Pchar(CB_Buf);[/red] CloseFile(CB_FromF);
ShowMessage(Unicode);
end;
不知道你的那些循环有什么作用,从你的程序结构来看那几个程序是无意义的,反而会引发错误,所以帮你去掉。
 
P

programsky

Unregistered / Unconfirmed
GUEST, unregistred user!
我也不明白lz为什么不直接读入UniCode,char数组和string并没有什么不同吧
 
B

bearyan

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序段是参考别人的,我的用意是从硬盘中读取指定的数据文件,然后将这个文件发送到端口进行打印;由于端口打印部分的程序段已经完成且使用了,但是就是读取这部分总是出错,因此我上来求助一下下;对于Vsun的答案,是能够读入,但是例如我的文件是120字节,但是实际读入UniCode的数据却只为4个字节???为什么???如何解决???
 
W

wql

Unregistered / Unconfirmed
GUEST, unregistred user!
var CB_FromF : File;
UniCode : String;
begin
AssignFile(CB_FromF,'11');
Reset(CB_FromF,1);
SetLength(UniCode,FileSize(CB_FromF));
BlockRead(CB_FromF,UniCode[1],SizeOf(CB_Buf));
CloseFile(CB_FromF);
Unicode:=string(pchar(strinh(Unicode)));
ShowMessage(Unicode);
end;
 
V

Vsun

Unregistered / Unconfirmed
GUEST, unregistred user!
var CB_FromF : File;
UniCode : String;
CB_NumRead : Integer;
CB_Buf : Array{[1..10240]} of Char;
i : Word;
begin
AssignFile(CB_FromF,'11');
Reset(CB_FromF,1);
SetLength(CB_Buf,FileSize(CB_FromF));
BlockRead(CB_FromF,[red]CB_Buf[0],Length(CB_Buf)[/red],CB_NumRead);
[red]Unicode:= Pchar(CB_Buf);[/red] CloseFile(CB_FromF);
ShowMessage(Unicode);
CB_Buf:=Nil;
end;
为什么会只读四字节的内容出来是因为动态数组存放的是一个指针(32位),用SizeOf返回的是指针的长度,所以就只读了四个字节。我忘了把SizeOf改成Length了,Length是取数组的长度。另外,你的程序可以按楼上的方法进行优化。
 
B

bearyan

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢,问题已解决
 
顶部