23.03.2012, 21:44
|
Новичок
|
|
Регистрация: 05.04.2010
Сообщения: 85
Репутация: 10
|
|
помогите. процесс не может получить доступ к файлу
процесс не может получить доступ к файлу. файл занят другим процессом. в чем ошибка? я же, вроде, освободил файлы, подскажите пожалуйста.
Код:
unit USGDMG;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, ComCtrls, ShellCtrls, StdCtrls;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Open1: TOpenDialog;
LV1: TListView;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
ShellTreeView1: TShellTreeView;
copy: TButton;
Label1: TLabel;
procedure SpeedButton1Click(Sender: TObject);
procedure LV1ColumnClick(Sender: TObject; Column: TListColumn);
procedure LV1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure copyClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
numCol:integer;
implementation
{$R *.dfm}
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
list:TListItem;
Npk,Npr:array[0..4] of byte;
Npktr,Nprtr:real;
f:TFileStream;
i:integer;
begin
if open1.Execute then begin
for i:=0 to open1.Files.Count-1 do begin
f:=TFileStream.Create(open1.Files[i],fmOpenRead);
f.Seek(67,sofromBeginning);
f.Read(Npr,sizeof(npr));
f.Seek(72,sofromBeginning);
f.Read(Npk,sizeof(npk));
Nprtr:=Npr[0]*256*256+Npr[1]*256+Npr[2];
Nprtr:=Nprtr+Npr[3]/256+Npr[4]/256/256;
Npktr:=Npk[0]*256*256+Npk[1]*256+Npk[2];
Npktr:=Npktr+Npk[3]/256+Npk[4]/256/256;
list:= lv1.Items.Add;
list.Caption:=extractfileName(open1.Files[i]);
list.SubItems.add(floattostr(Nprtr));
list.SubItems.Add(floattostr(Npktr));
list.SubItems.Add(extractfiledir(open1.Files[i]));
end;
f.Free;
end else exit;
end;
procedure TForm1.LV1ColumnClick(Sender: TObject; Column: TListColumn);
begin
numCol:=column.Index;
(Sender as TCustomListView).AlphaSort;
end;
procedure TForm1.LV1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
ix: Integer;
begin
if numCol = 0 then
Compare := CompareText(Item1.Caption,Item2.Caption)
else begin
ix := numCol - 1;
Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
end;
end;
procedure TForm1.copyClick(Sender: TObject);
var
from,tofile:string;
i:integer;
begin
i := LV1.Selected.Index;
for i:=i to i+LV1.SelCount-1 do begin
from:=lv1.Items.Item[i].SubItems.strings[2]+'\'+lv1.Items.Item[i].caption;
tofile:=shelltreeview1.Path+'\'+lv1.Items.Item[i].caption;
if copyfile(Pchar(from),Pchar(tofile),false)
then ShowMessage('Ôàéë óñïåøíî ñêîïèðîâàí!')
else ShowMessage('Íåóäà÷à!'+IntToStr(GetLastError));
end;
showmessage('Êîïèðîâàíèå çàâåðøåíî');
end;
end.
|