文件的格式暂定是jpg。
我想过将多个文件分别读入流,然后加分隔符号,再合并所有流,最后写入字段。读出后根据分隔符号分离就行了。但是这样的分割符号应该如何定义比较好呢?—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
我想过将多个文件分别读入流,然后加分隔符号,再合并所有流,最后写入字段。读出后根据分隔符号分离就行了。但是这样的分割符号应该如何定义比较好呢?—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
解决方案 »
- delphil7 不显示提示
- 时实刷新 表格 怎么实现 ???
- 什么原因呢?
- 百思不得其解??
- 问题解决就给分,DBIMAGE组件为什么不能装入图片
- 有没有哪本书介绍使用installshield express的?网上哪有installshield express资料?
- 谁能给我一个自动生成编号的脚本。
- 怎样判断一个form是否存在?
- 请问手机MODEM是什么?用手机数据线与PC串口相连在PC上看手机短消息是否可以不需要那个MODEM?
- 多线程运行时出现了这个问题:“Canvas does not allow drawing”
- OLE的含义是什么?(我是初学者,不要见笑)
- 如何解决客户端连接Win2000Server应用程序服务器出现"拒绝存取"?
type
TData = record
FileName: array [0..50] of Char;
FileSize: Integer;
FileData: PChar;
end;
然后以文件流或内存流的形式将一个个文件写到一个TStream对象里面,然后数据对TBlobField(Field).LoadFromStream(...)进行导入。导出时按上面的格式进行分隔。
var
S: string;
I, Size: Integer;
Stream: TMemoryStream;
begin
AStream.Size := 0; //clear
Stream := TMemoryStream.Create;
for I := 0 to AFileList.Count - 1 do
begin
S := AFileList[I];
Stream.LoadFromFile(S);
S := ExtractFileName(S);
AStream.WriteBuffer(S[1], Length(S));
Size := Stream.Size;
AStream.WriteBuffer(Size, SizeOf(Size));
AStream.WriteBuffer(Stream.Memory^, Size);
end;
end;begin
list.Add('c:\a.file');
list.Add('d:\b.file');
WriteFileToStream(Stream, List);
TBlobField(Table1.FieldByName('filefield')).LoadFromFile(Stream);
end;像这样
读的时候就是先读50个字符,它为FileName,再读4字节的FileSize,然后再读FileSize个字节的FileData,然后Loop,就可以读出全部的内容了.
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
S := ExtractFileName(S);
AStream.WriteBuffer(S[1], Length(S));写进去的时候要指定这个Size,而不是它的Length,因为读的时候是无法确定它的Length的,所以:
S := ExtractFileName(S);
AStream.WriteBuffer(S[1], 50);即只写50个字符作为文件名的长度,超过则截掉。
这样读的时候即使后面没有,也不会影响FileSize, FileData的数据。不然读的数据肯定是有错的。