【发布时间】:2014-01-24 17:19:48
【问题描述】:
当您尝试读取 TZipFile.FileComment 时,编译器会报告这将无法编译: [dcc64 错误] Unit1.pas(451): E2010 不兼容的类型:'string' 和 'System.TArray'
var
iFileComment: string;
...
iFileComment := iZipFile.FileInfo[i].FileComment;
那么...您如何阅读 TZipFile 注释并将其分配给字符串?这看起来很奇怪,因为我可以成功编写 zipfile 注释如下:
iZipFile.FileComment[ListView1.ItemIndex] := FileComment1.Text;
如果您尝试阅读评论:
iFileComment := iZipFile.FileComment[i];
zip 文件中的每个文件都有相同的注释,即使实际上只有一个文件有文件注释。
cmets 是这样添加的:
procedure TForm1.SetFileComment1Click(Sender: TObject); var
iZipFile: TZipFile; iListItem: TlistItem;
begin
if ListView1.ItemIndex <> -1 then
begin
iZipFile := TZipFile.Create;
try
{ Open zip file for writing }
iZipFile.Open(ZipFilename1.Text, zmReadWrite);
iZipFile.FileComment[ListView1.ItemIndex] := FileComment1.Text;
{ Close the zip file }
iZipFile.Close;
{ Update the listview }
ListView1.Items.BeginUpdate;
try
iListItem := ListView1.Items.Item[ListView1.ItemIndex];
iListItem.SubItems[5] := FileComment1.Text;
finally
ListView1.Items.EndUpdate;
end;
finally
iZipFile.Free;
end;
end
else
begin
MessageBox(0, 'A filename is not selected. Please select a filename.',
'Warning', MB_ICONINFORMATION or MB_OK);
end;
end;
编辑
我现在按照建议使用 iZipFile.FileComment[Index] 设置和写入文件cmets。 当我设置一个文件的注释并在工作的 zip 应用程序中打开 zip 文件时,只有我设置的单个文件与注释一起出现......在这个 TZipFile 项目中,当我加载相同的 zip 文件时,每个文件都有相同的注释,但我看不出为什么。除了 filecomment 字段之外,所有其他字段都按照您的预期运行。
这是打开 zip 文件的代码:
procedure TForm1.Open1Click(Sender: TObject);
{ Open zip file. }
var
i: integer;
iZipFile: TZipFile;
iFilename: string;
iDateTime: TDateTime;
iCompressedSize: cardinal;
iUnCompressedSize: cardinal;
iCRC32: cardinal;
iCompressionMethod: word;
iFileComment: string;
iListItem: TlistItem;
begin
if OpenDialog1.Execute then
begin
if FileExists(OpenDialog1.FileName) then
begin
iZipFile := TZipFile.Create;
try
ListView1.Items.Clear;
ZipFilename1.Text := OpenDialog1.FileName;
try
{ Open zip file for reading }
iZipFile.Open(ZipFilename1.Text, zmReadWrite);
for i := 0 to iZipFile.FileCount - 1 do
begin
iFilename := iZipFile.FileNames[i];
iListItem := ListView1.Items.Add;
iListItem.Caption := iFilename;
iDateTime := FileDateToDateTime
(iZipFile.FileInfo[i].ModifiedDateTime);
iListItem.SubItems.Add(DateTimeToStr(iDateTime)); { 0 }
iCompressedSize := iZipFile.FileInfo[i].CompressedSize;
iListItem.SubItems.Add(FormatByteSize(iCompressedSize)); { 1 }
iUnCompressedSize := iZipFile.FileInfo[i].UncompressedSize;
iListItem.SubItems.Add(FormatByteSize(iUnCompressedSize)); { 2 }
iCRC32 := iZipFile.FileInfo[i].CRC32;
iListItem.SubItems.Add(IntToStr(iCRC32)); { 3 }
iCompressionMethod := iZipFile.FileInfo[i].CompressionMethod;
iListItem.SubItems.Add
(ZipCompressionToStr(iCompressionMethod)); { 4 }
iFileComment := iZipFile.FileComment[i];
iListItem.SubItems.Add(iFileComment); { 5 }
end;
{ Close the zip file }
iZipFile.Close;
except
on E: Exception do
begin
ShowMessage(E.ClassName + #10#13 + E.Message);
end;
end;
finally
iZipFile.Free;
end;
end;
end;
end;
【问题讨论】:
标签: delphi delphi-xe4