想要對某一文件寫一自己的标识,如在文件头上写一字符串"abc",
下次要打开该文件时,先判断一下,文件头上是不是有自己写的"abc"
如果是的话再打开该文件
var
sSrcFile: string;
plWr: TWriter;
destFs: TFileStream;
srcFs: TMemoryStream;
begin
if not OpenDialog1.Execute then Exit;
sSrcFile := OpenDialog1.FileName;
srcFs := TMemoryStream.Create;
srcFs.LoadFromFile(sSrcFile);
destFs := TFileStream.Create('C:\11.dat', fmCreate);
plWr := TWriter.Create(destFs, 4096);
try
plWr.WriteString('abc');
plWr.FlushBuffer;
destFs.WriteBuffer(srcFs.Memory^, srcFs.Size);
finally
plWr.Free;
destFs.Free;
srcFs.Free;
end;
end;读取的时候:
var
re: TReader;
srcFs: TMemoryStream;
destFs: TFileStream;
temp: string;
iPos: Integer;
begin
if not OpenDialog1.Execute then Exit;
srcFs := TMemoryStream.Create;
srcFs.LoadFromFile(OpenDialog1.FileName);
destFs := TFileStream.Create('C:\1.jpg', fmCreate);
re := TReader.Create(srcFs, 4096);
try
temp := re.ReadString;
iPos := re.Position;
ShowMessage(temp);//是abc没错
destFs.WriteBuffer(srcFs.Memory^, srcFs.Size - iPos);
//然后查看C:\1.jpg,查看不到图片
finally
re.Free;
srcFs.Free;
destFs.Free;
end;
end;请问在读取的时候,是哪里出问题了,要如何解决,谢谢
下次要打开该文件时,先判断一下,文件头上是不是有自己写的"abc"
如果是的话再打开该文件
var
sSrcFile: string;
plWr: TWriter;
destFs: TFileStream;
srcFs: TMemoryStream;
begin
if not OpenDialog1.Execute then Exit;
sSrcFile := OpenDialog1.FileName;
srcFs := TMemoryStream.Create;
srcFs.LoadFromFile(sSrcFile);
destFs := TFileStream.Create('C:\11.dat', fmCreate);
plWr := TWriter.Create(destFs, 4096);
try
plWr.WriteString('abc');
plWr.FlushBuffer;
destFs.WriteBuffer(srcFs.Memory^, srcFs.Size);
finally
plWr.Free;
destFs.Free;
srcFs.Free;
end;
end;读取的时候:
var
re: TReader;
srcFs: TMemoryStream;
destFs: TFileStream;
temp: string;
iPos: Integer;
begin
if not OpenDialog1.Execute then Exit;
srcFs := TMemoryStream.Create;
srcFs.LoadFromFile(OpenDialog1.FileName);
destFs := TFileStream.Create('C:\1.jpg', fmCreate);
re := TReader.Create(srcFs, 4096);
try
temp := re.ReadString;
iPos := re.Position;
ShowMessage(temp);//是abc没错
destFs.WriteBuffer(srcFs.Memory^, srcFs.Size - iPos);
//然后查看C:\1.jpg,查看不到图片
finally
re.Free;
srcFs.Free;
destFs.Free;
end;
end;请问在读取的时候,是哪里出问题了,要如何解决,谢谢
procedure TForm1.Button1Click(Sender: TObject);
var
ms,ms1: TMemoryStream;
a: array[0..1] of byte;
begin
ms:= TMemoryStream.Create;
ms.LoadFromFile('e:\1.dat');
ms1:= TMemoryStream.Create;
a[0]:=$FF;
a[1]:=$FF;
ms1.Write(a,sizeof(a));//写入文件头信息
ms1.Write(ms.Memory^,ms.Size);//把文件内容附加上
ms1.SaveToFile('e:\2.dat');
ms1.Free;
ms.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
ms,ms1: TMemoryStream;
a: array[0..1] of byte;
begin
ms:= TMemoryStream.Create;
ms.LoadFromFile('e:\2.dat');
ms1:= TMemoryStream.Create;
ms.Read(a,sizeof(a));//读取文件头信息
//判断
ms.Position:=sizeof(a);
ms1.CopyFrom(ms,ms.Size-sizeof(a));//读取文件内容去除文件头部分
ms1.SaveToFile('e:\3.dat');
ms1.Free;
ms.Free;
end;
var
ms: TMemoryStream;
begin
ms:= TMemoryStream.Create;
ms.LoadFromFile('c:\1.jpg');
ms.Position := 0;
ms.Write('abc',3);
ms.SaveToFile('c:\1.jpg');
end;//读取
var
ms: TMemoryStream;
buff:array [0..2] of Char;
begin
ms:= TMemoryStream.Create;
ms.LoadFromFile('c:\1.jpg');
ms.Position := 0;
ms.Read(buff,3);//buff中就是'abc'
end;