filewrite不行吗? procedure TForm1.Button1Click(Sender: TObject); var BackupName: string; FileHandle: Integer; StringLen: Integer; X: Integer; Y: Integer; begin if SaveDialog1.Execute then begin if FileExists(SaveDialog1.FileName) then begin BackupName := ExtractFileName(SaveDialog1.FileName); BackupName := ChangeFileExt(BackupName, '.BAK'); if not RenameFile(SaveDialog1.FileName, BackupName) then raise Exception.Create('Unable to create backup file.'); end; FileHandle := FileCreate(SaveDialog1.FileName); { Write out the number of rows and columns in the grid. } FileWrite(FileHandle, StringGrid1.ColCount, SizeOf(StringGrid1.ColCount)); FileWrite(FileHandle, StringGrid1.RowCount, SizeOf(StringGrid1.RowCount)); for X := 0 to StringGrid1.ColCount ?1 do begin for Y := 0 to StringGrid1.RowCount ?1 do begin { Write out the length of each string, followed by the string itself. } StringLen := Length(StringGrid1.Cells[X,Y]); FileWrite(FileHandle, StringLen, SizeOf(StringLen)); FileWrite(FileHandle, StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]); end; end; FileClose(FileHandle); end;end;
BOOL WriteFile( HANDLE hFile, // handle to file to write to LPCVOID lpBuffer, // pointer to data to write to file DWORD nNumberOfBytesToWrite, // number of bytes to write LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O );
unit mgr;interfaceuses Windows, Messages, SysUtils, Classes, Forms, StdCtrls,shlobj, Controls, Dialogs,shellapi;type TForm1 = class(TForm) GroupBox1: TGroupBox; Button1: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Button3: TButton; GroupBox2: TGroupBox; ListBox1: TListBox; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean); procedure ListBox1DblClick(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } fstream1:tfilestream; fstream2:tfilestream; list:tstrings; len:tstrings; public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM} const flen=136192; //请注意修改这儿的长度type FILE_INFO=record filename:array[0..MAX_PATH] of char; len:integer; end;function SelectDirectory(handle:hwnd;const Caption: string; const Root: WideString;out Directory: string): Boolean; var lpbi:_browseinfo; buf:array [0..MAX_PATH] of char; id:ishellfolder; eaten,att:cardinal; rt:pitemidlist; initdir:pwidechar; begin result:=false; lpbi.hwndOwner:=handle; lpbi.lpfn:=nil; lpbi.lpszTitle:=pchar(caption); lpbi.ulFlags:=BIF_RETURNONLYFSDIRS+BIF_EDITBOX; SHGetDesktopFolder(id); initdir:=pwchar(root); id.ParseDisplayName(0,nil,initdir,eaten,rt,att); lpbi.pidlRoot:=rt; getmem(lpbi.pszDisplayName,MAX_PATH); try result:=shgetpathfromidlist(shbrowseforfolder(lpbi),buf); except freemem(lpbi.pszDisplayName); end; if result then begin directory:=buf; if length(directory)<>3 then directory:=directory+'\'; end; end;procedure TForm1.Button1Click(Sender: TObject); var info:FILE_INFO; i:integer; buf:array[0..4096] of byte; s:integer; begin if savedialog1.Execute then if opendialog1.Execute then begin try copyfile(pchar(paramstr(0)),pchar(savedialog1.FileName),false); fstream1:=tfilestream.Create(pchar(savedialog1.FileName),fmopenreadwrite); fstream1.Seek(flen,soFromBeginning); for i:=0 to opendialog1.Files.Count-1 do begin strpcopy(info.filename,extractfilename(opendialog1.files.strings[i])); fstream2:=tfilestream.Create(opendialog1.Files.Strings[i],fmopenread); info.len:=fstream2.Size; fstream1.Write(info,sizeof(info)); while fstream2.Position<>fstream2.Size do begin s:=fstream2.Read(buf,sizeof(buf)); fstream1.Write(buf,s); end; fstream2.Free; end; finally fstream1.Free; end; end; end;procedure TForm1.Button3Click(Sender: TObject); var f:textfile; info:FILE_INFO; i:integer; buf:array[0..4096] of byte; s:integer; count,b:integer; dir:string; begin if selectdirectory(handle,'选择输出文件夹','',dir) then try fstream1:=tfilestream.Create(paramstr(0),fmShareDenyWrite); fstream1.Seek(flen,soFromBeginning); while fstream1.Position<>fstream1.Size do begin fstream1.Read(info,sizeof(info)); count:=0; assignfile(f,dir+info.filename); rewrite(f); closefile(f); fstream2:=tfilestream.Create(dir+info.filename,fmopenwrite); fstream2.Size:=0; i:=info.len div sizeof(buf); for b:=1 to i do begin s:=fstream1.Read(buf,sizeof(buf)); fstream2.Write(buf,s); inc(count,s); end; s:=fstream1.Read(buf,info.len-count); fstream2.Write(buf,s); fstream2.Free; end; finally fstream1.Free; end; end;procedure TForm1.FormCreate(Sender: TObject); var info:FILE_INFO; begin list:=tstringlist.Create; len:=tstringlist.Create; try fstream1:=tfilestream.Create(paramstr(0),fmShareDenyWrite); fstream1.Seek(flen,soFromBeginning); while fstream1.Position<>fstream1.Size do begin fstream1.Read(info,sizeof(info)); list.Add(inttostr(fstream1.position)); len.Add(inttostr(info.len)); listbox1.Items.Add(info.filename); fstream1.Seek(info.len,soFromCurrent); end; finally fstream1.Free; end; if listbox1.Items.Count>0 then button3.Enabled:=true else button3.Enabled:=false; end;procedure TForm1.SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean); var f:integer; begin f:=filecreate(savedialog1.FileName); if f<=0 then begin MessageBox(handle,'不能选择输出到该文件!',pchar(application.Title),MB_OK+MB_ICONerror); canclose:=false; end; fileclose(f); end;procedure TForm1.ListBox1DblClick(Sender: TObject); var path:array[0..max_path] of char; filename:string; f,b,s,count:integer; buf:array[0..4096] of char; begin if button3.Enabled=false then exit; gettemppath(Max_path,path); filename:=path+listbox1.Items.Strings[listbox1.itemindex]; fstream1:=tfilestream.Create(paramstr(0),fmShareDenyWrite); f:=filecreate(filename); fileclose(f); count:=0; fstream2:=tfilestream.Create(filename,fmopenwrite); fstream1.Seek(strtoint(list.Strings[listbox1.ItemIndex]),sofrombeginning); f:=strtoint(len.Strings[listbox1.itemindex]) div sizeof(buf); for b:=1 to f do begin s:=fstream1.Read(buf,sizeof(buf)); fstream2.Write(buf,s); inc(count,s); end; s:=fstream1.Read(buf,strtoint(len.Strings[listbox1.itemindex])-count); fstream2.Write(buf,s); fstream2.Free; shellexecute(handle,'open',pchar(filename),'','',sw_show); fstream1.Free; end;procedure TForm1.FormDestroy(Sender: TObject); var i:integer; path:array[0..max_path] of char; filename:string; begin list.Free; len.Free; gettemppath(Max_path,path); for i:=0 to listbox1.Items.Count-1 do begin filename:=path+listbox1.Items.Strings[i]; deletefile(filename); end; end;
没有作过这样的程序, 学习Ing 接分
有人把delphi的帮助帖了出来,要知道,这段代码在delphi中根本编译不了。
procedure TForm1.Button1Click(Sender: TObject); var F:file of byte; begin AssignFile(F,'F:\1.txt'); Reset(F); Caption:=IntToStr(FileSize(F)); CloseFile(F);end;procedure TForm1.Button2Click(Sender: TObject); var MemStream:TMemoryStream; Len:int64; begin MemStream:=TMemoryStream.Create; Len:=1024*1024*100; //100M的文件 MemStream.SetSize(Len); MemStream.SaveToFile('F:\1.txt'); MemStream.Free; end;
网络蚂蚁/FlashGet在下载文件的时候,会创建这个文件的镜像,如果文件很大,例如一个光盘镜像文件ISO,有650M,此时程序就像死机一样,估计程序在不停的写磁盘~~~~~~:),那么如何快速地创建这种超大的文件呢?看下面的代码: function CreateFileOnDisk(FileName: string; Size: Int64): Boolean; { 在硬盘上面快速创建指定大小的文件 } var F: HFILE; begin Result := not FileExists(FileName); if Result then begin F := FileCreate(FileName, 0); SetFilePointer(F, Int64Rec(Size).Lo, @Int64Rec(Size).Hi, FILE_BEGIN); SetEndOfFile(F); Result := GetLastError = 0; FileClose(F); end; end;
procedure TForm1.Button1Click(Sender: TObject);
var
BackupName: string;
FileHandle: Integer;
StringLen: Integer;
X: Integer;
Y: Integer;
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
begin
BackupName := ExtractFileName(SaveDialog1.FileName);
BackupName := ChangeFileExt(BackupName, '.BAK');
if not RenameFile(SaveDialog1.FileName, BackupName) then raise Exception.Create('Unable to create backup file.');
end;
FileHandle := FileCreate(SaveDialog1.FileName);
{ Write out the number of rows and columns in the grid. }
FileWrite(FileHandle,
StringGrid1.ColCount, SizeOf(StringGrid1.ColCount));
FileWrite(FileHandle,
StringGrid1.RowCount, SizeOf(StringGrid1.RowCount));
for X := 0 to StringGrid1.ColCount ?1 do
begin for Y := 0 to StringGrid1.RowCount ?1 do
begin
{ Write out the length of each string, followed by the string itself. }
StringLen := Length(StringGrid1.Cells[X,Y]);
FileWrite(FileHandle, StringLen, SizeOf(StringLen));
FileWrite(FileHandle,
StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]);
end;
end;
FileClose(FileHandle);
end;end;
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O
);
//长度分别为 10 5 剩下的
procedure TForm1.Button2Click(Sender: TObject);
var
f:TFileStream;
m:TMemoryStream;
begin
f:=TFileStream.Create('d:\temp',fmOpenReadWrite );
// showmessage(inttostr(f.size));
f.position:=0; m:=TMemoryStream.create;
m.CopyFrom(f,10);
m.SaveToFile('d:\temp1'); m.size:=0;
m.CopyFrom(f,5);
m.SaveToFile('d:\temp2'); m.size:=0;
m.CopyFrom(f,f.size-15);
m.SaveToFile('d:\temp3'); m.free;
f.free;end;
Windows, Messages, SysUtils, Classes, Forms,
StdCtrls,shlobj, Controls, Dialogs,shellapi;type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button3: TButton;
GroupBox2: TGroupBox;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean);
procedure ListBox1DblClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
fstream1:tfilestream;
fstream2:tfilestream;
list:tstrings;
len:tstrings;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}
const
flen=136192; //请注意修改这儿的长度type
FILE_INFO=record
filename:array[0..MAX_PATH] of char;
len:integer;
end;function SelectDirectory(handle:hwnd;const Caption: string; const Root: WideString;out Directory: string): Boolean;
var
lpbi:_browseinfo;
buf:array [0..MAX_PATH] of char;
id:ishellfolder;
eaten,att:cardinal;
rt:pitemidlist;
initdir:pwidechar;
begin
result:=false;
lpbi.hwndOwner:=handle;
lpbi.lpfn:=nil;
lpbi.lpszTitle:=pchar(caption);
lpbi.ulFlags:=BIF_RETURNONLYFSDIRS+BIF_EDITBOX;
SHGetDesktopFolder(id);
initdir:=pwchar(root);
id.ParseDisplayName(0,nil,initdir,eaten,rt,att);
lpbi.pidlRoot:=rt;
getmem(lpbi.pszDisplayName,MAX_PATH);
try
result:=shgetpathfromidlist(shbrowseforfolder(lpbi),buf);
except
freemem(lpbi.pszDisplayName);
end;
if result then
begin
directory:=buf;
if length(directory)<>3 then directory:=directory+'\';
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
info:FILE_INFO;
i:integer;
buf:array[0..4096] of byte;
s:integer;
begin
if savedialog1.Execute then
if opendialog1.Execute then
begin
try
copyfile(pchar(paramstr(0)),pchar(savedialog1.FileName),false);
fstream1:=tfilestream.Create(pchar(savedialog1.FileName),fmopenreadwrite);
fstream1.Seek(flen,soFromBeginning);
for i:=0 to opendialog1.Files.Count-1 do
begin
strpcopy(info.filename,extractfilename(opendialog1.files.strings[i]));
fstream2:=tfilestream.Create(opendialog1.Files.Strings[i],fmopenread);
info.len:=fstream2.Size;
fstream1.Write(info,sizeof(info));
while fstream2.Position<>fstream2.Size do
begin
s:=fstream2.Read(buf,sizeof(buf));
fstream1.Write(buf,s);
end;
fstream2.Free;
end;
finally
fstream1.Free;
end;
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var
f:textfile;
info:FILE_INFO;
i:integer;
buf:array[0..4096] of byte;
s:integer;
count,b:integer;
dir:string;
begin
if selectdirectory(handle,'选择输出文件夹','',dir) then
try
fstream1:=tfilestream.Create(paramstr(0),fmShareDenyWrite);
fstream1.Seek(flen,soFromBeginning);
while fstream1.Position<>fstream1.Size do
begin
fstream1.Read(info,sizeof(info));
count:=0;
assignfile(f,dir+info.filename);
rewrite(f);
closefile(f);
fstream2:=tfilestream.Create(dir+info.filename,fmopenwrite);
fstream2.Size:=0;
i:=info.len div sizeof(buf);
for b:=1 to i do
begin
s:=fstream1.Read(buf,sizeof(buf));
fstream2.Write(buf,s);
inc(count,s);
end;
s:=fstream1.Read(buf,info.len-count);
fstream2.Write(buf,s);
fstream2.Free;
end;
finally
fstream1.Free;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var
info:FILE_INFO;
begin
list:=tstringlist.Create;
len:=tstringlist.Create;
try
fstream1:=tfilestream.Create(paramstr(0),fmShareDenyWrite);
fstream1.Seek(flen,soFromBeginning);
while fstream1.Position<>fstream1.Size do
begin
fstream1.Read(info,sizeof(info));
list.Add(inttostr(fstream1.position));
len.Add(inttostr(info.len));
listbox1.Items.Add(info.filename);
fstream1.Seek(info.len,soFromCurrent);
end;
finally
fstream1.Free;
end;
if listbox1.Items.Count>0 then button3.Enabled:=true else button3.Enabled:=false;
end;procedure TForm1.SaveDialog1CanClose(Sender: TObject;
var CanClose: Boolean);
var
f:integer;
begin
f:=filecreate(savedialog1.FileName);
if f<=0 then
begin
MessageBox(handle,'不能选择输出到该文件!',pchar(application.Title),MB_OK+MB_ICONerror);
canclose:=false;
end;
fileclose(f);
end;procedure TForm1.ListBox1DblClick(Sender: TObject);
var
path:array[0..max_path] of char;
filename:string;
f,b,s,count:integer;
buf:array[0..4096] of char;
begin
if button3.Enabled=false then exit;
gettemppath(Max_path,path);
filename:=path+listbox1.Items.Strings[listbox1.itemindex];
fstream1:=tfilestream.Create(paramstr(0),fmShareDenyWrite);
f:=filecreate(filename);
fileclose(f);
count:=0;
fstream2:=tfilestream.Create(filename,fmopenwrite);
fstream1.Seek(strtoint(list.Strings[listbox1.ItemIndex]),sofrombeginning);
f:=strtoint(len.Strings[listbox1.itemindex]) div sizeof(buf);
for b:=1 to f do
begin
s:=fstream1.Read(buf,sizeof(buf));
fstream2.Write(buf,s);
inc(count,s);
end;
s:=fstream1.Read(buf,strtoint(len.Strings[listbox1.itemindex])-count);
fstream2.Write(buf,s);
fstream2.Free;
shellexecute(handle,'open',pchar(filename),'','',sw_show);
fstream1.Free;
end;procedure TForm1.FormDestroy(Sender: TObject);
var
i:integer;
path:array[0..max_path] of char;
filename:string;
begin
list.Free;
len.Free;
gettemppath(Max_path,path);
for i:=0 to listbox1.Items.Count-1 do
begin
filename:=path+listbox1.Items.Strings[i];
deletefile(filename);
end;
end;
学习Ing
接分
var
F:file of byte;
begin
AssignFile(F,'F:\1.txt');
Reset(F);
Caption:=IntToStr(FileSize(F));
CloseFile(F);end;procedure TForm1.Button2Click(Sender: TObject);
var
MemStream:TMemoryStream;
Len:int64;
begin
MemStream:=TMemoryStream.Create;
Len:=1024*1024*100; //100M的文件
MemStream.SetSize(Len);
MemStream.SaveToFile('F:\1.txt');
MemStream.Free;
end;
function CreateFileOnDisk(FileName: string; Size: Int64): Boolean;
{
在硬盘上面快速创建指定大小的文件
}
var
F: HFILE;
begin
Result := not FileExists(FileName);
if Result then
begin
F := FileCreate(FileName, 0);
SetFilePointer(F, Int64Rec(Size).Lo, @Int64Rec(Size).Hi, FILE_BEGIN);
SetEndOfFile(F);
Result := GetLastError = 0;
FileClose(F);
end;
end;