Delphi 支持三种文件类型: 文本文件、记录文件、无类型文件。

文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。

文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。

文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。

1.文件变量与文件名关联: 
AssignFile(VarTxt, FileName); --以可写方式打开文件。如果文件不存在,将会自动创建。使用该函数,将会覆盖文件中的所有内容
FileName 如果省略路径将默认当前目录。

2.初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。

文件不存在时使用 Reset 或 Append 会引发一个I/O异常。

最后用 CloseFile 关闭文件。

一 TmemoryStream转化为 byte[] (TByteDynArray)

 

View Code
procedure TForm1.Btn1Click(Sender: TObject);
var
  memoryStream:TMemoryStream;
  byteArray:TByteDynArray;
    fsize:Integer;
begin
   memoryStream:
=TMemoryStream.Create;
   memoryStream.LoadFromFile(
'd:\\Sunset.jpg');
   fsize:
=  memoryStream.Size;
   SetLength(byteArray,fsize);   --设置数组长度
    memoryStream.Read(byteArray[
0],fsize);  -- 注意应该为byteArray[0],而不是byteArray
   ByteArrayToFile(byteArray,
'd:\\aa.jpg' );
   memoryStream.Free;
end;

二, 将bety[] 保存入文件

 

View Code
procedure ByteArrayToFile(const ByteArray : TByteDynArray; const FileName : string );
var
 Count: integer;
 F: FIle 
of Byte;
 pTemp: Pointer;
begin
 AssignFile( F, FileName );-- 文件变量与文件名关联
 Rewrite(F);  --重新写一个文件,即覆盖,文件若不存在会自己创建。
 
try
    Count :
= Length( ByteArray );
    pTemp :
= @ByteArray[0];
    BlockWrite(F, pTemp^, Count ); // blockWrite 写入; 参数2是要写入的内容(pTemp^表示指针的内容); 参数3表示写入 Count 次,以一个字节为单位。 
 
finally
    CloseFile( F );
 
end;
end;

 

@ 运算符返回一个变量、函数、过程或方法的地址,也就是说,@ 运算符构建一个指向运算数的指针。

 

 

http://www.delphifans.com/infoview/Article_536.html

 

 

 

 

posted on 2011-08-18 21:20  cnby  阅读(4432)  评论(0)    收藏  举报