일단 소스가 길지 않으니 전체소스를 올립니다.
--------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, FileCtrl, ShellAPI;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
copyfiles : TSHFileOpStruct;
str1, str2 : pchar;
begin
if not DirectoryExists('e:test2') then
if not CreateDir('e:test2') then
raise Exception.Create('Cannot create e:test2');
with copyfiles do
begin
wnd := 0;
wfunc := fo_copy;
pfrom := ('e:test1111.txt');
pto := ('e:test2111.txt');
fflags := fof_simpleprogress;
end;
if fileexists('e:test2111.txt') then
begin
if fileage('e:test2111.txt') <> fileage('e:test1111.txt') then
shfileoperation(copyfiles)
end
else
shfileoperation(copyfiles);
str1 := ('e:test1111.txt');
str2 := ('e:test2111.txt');
winexec(strpcopy(str1, str2), sw_show);
Close;
end;
end.
------------------------------------------------------------------------------
실행이 된 다음에 디렉토리도 만들고 파일도 복사 / 갱신도 됩니다.
그런데 작업을 수행한 다음과 같은 에러 메세지가 나오는데 무엇이 문제인지 모르겠습니다.
디버깅을 해보니까 다음 부분에서 에러가 걸리더라구요..
winexec(strpcopy(str1, str2), sw_show);
<에러 메세지>
access violation at address 00407DE9 in module 'update.exe', Write or address 0043E6E0.
고수님들 도와 주십시요..
-------------------------------------------------------
var
copyfiles : TSHFileOpStruct;
str1, str2 : array[0..MAX_PATH] of char; // MAX_PATH = 260
---------------------------------------------------------------
손상수 wrote:
> 일단 소스가 길지 않으니 전체소스를 올립니다.
> --------------------------------------------------------
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> StdCtrls, Buttons, FileCtrl, ShellAPI;
>
> type
> TForm1 = class(TForm)
> procedure FormCreate(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.FormCreate(Sender: TObject);
> var
> copyfiles : TSHFileOpStruct;
> str1, str2 : pchar;
> begin
> if not DirectoryExists('e:test2') then
> if not CreateDir('e:test2') then
> raise Exception.Create('Cannot create e:test2');
> with copyfiles do
> begin
> wnd := 0;
> wfunc := fo_copy;
> pfrom := ('e:test1111.txt');
> pto := ('e:test2111.txt');
> fflags := fof_simpleprogress;
> end;
> if fileexists('e:test2111.txt') then
> begin
> if fileage('e:test2111.txt') <> fileage('e:test1111.txt') then
> shfileoperation(copyfiles)
> end
> else
> shfileoperation(copyfiles);
>
> str1 := ('e:test1111.txt');
> str2 := ('e:test2111.txt');
> winexec(strpcopy(str1, str2), sw_show);
> Close;
> end;
>
> end.
> ------------------------------------------------------------------------------
> 실행이 된 다음에 디렉토리도 만들고 파일도 복사 / 갱신도 됩니다.
> 그런데 작업을 수행한 다음과 같은 에러 메세지가 나오는데 무엇이 문제인지 모르겠습니다.
> 디버깅을 해보니까 다음 부분에서 에러가 걸리더라구요..
> winexec(strpcopy(str1, str2), sw_show);
>
> <에러 메세지>
> access violation at address 00407DE9 in module 'update.exe', Write or address 0043E6E0.
>
> 고수님들 도와 주십시요..
>
>
>