PDA

View Full Version : کپی فایل و تغییر قسمتی از نام فایل



khoshblagh
چهارشنبه 17 شهریور 1389, 08:30 صبح
با سلام خدمت دوستان
چندی قبل از همین سایت تابعی جهت کپی فولدر و فایل دیدم و سعی کردم از آن برای کپی یک فایل با تغییر پسوند آن استفاده نمایم. ظاهرا مشکل را پیدا کردن مسیر فایل مبدا میباشد.من میخواهم این کپی را در همان فولدر مسیر اجرای برنامه انجام شود.ظاهرا مشکل سر پیدا کردن مسیر فایل میباشد.متشکرم




function CopyToArea(FromDir,ToDir:string):Boolean;
var
lpFileOpStruct:TSHFileOpStruct;
begin
lpFileOpStruct.wFunc:=FO_COPY;
lpFileOpStruct.pFrom :=PChar(FromDir+#0);
lpFileOpStruct.pTo :=PChar(ToDir+#0);
lpFileOpStruct.fFlags:=FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR or FOF_SILENT;
Result:= not Boolean(SHFileOperation(lpFileOpStruct));
end;
procedure TfrmBimehDisket.FormCreate(Sender: TObject);
if FileExists('DSKWOR00.dbf') then DeleteFile('DSKWOR00.dbf');
CopyToArea('DSKWOR00.olg','DSKWOR00.dbf');
end;

SAASTN
چهارشنبه 17 شهریور 1389, 21:42 عصر
آدرس مسیر جاری ممکنه در طول اجرای برنامه تغییر کنه. اگه فایل توی یه آدرس نسبی نسبت به فایل اجرایی قرار داره برای بدست آوردنآدرس مطلقش از کد زیر استفاده کنید:
CopyToArea(
ExtractFilePath(Application.ExeName)+'DSKWOR00.olg ',
DestinationPath+'DSKWOR00.dbf');

khoshblagh
جمعه 19 شهریور 1389, 09:53 صبح
آدرس مسیر جاری ممکنه در طول اجرای برنامه تغییر کنه. اگه فایل توی یه آدرس نسبی نسبت به فایل اجرایی قرار داره برای بدست آوردنآدرس مطلقش از کد زیر استفاده کنید:
CopyToArea(
ExtractFilePath(Application.ExeName)+'DSKWOR00.olg ',
DestinationPath+'DSKWOR00.dbf');

با سلام
آدرس مسیر جاری به هیچ عنوان تغییر نمی نماید. یعنی همیشه فایلهای مورد نظر در همان مسیر اجرای برنامه قرار دارد. بنابر این با این فرض چگونه آدرس را در کد قرار دهم؟ متشکرم.

Felony
جمعه 19 شهریور 1389, 18:56 عصر
با سلام
آدرس مسیر جاری به هیچ عنوان تغییر نمی نماید. یعنی همیشه فایلهای مورد نظر در همان مسیر اجرای برنامه قرار دارد. بنابر این با این فرض چگونه آدرس را در کد قرار دهم؟ متشکرم.
چرا از تابع CopyFile استفاده نمیکنید ؟

var
Source, Dest : String;
begin
Source:= ExtractFilePath(Application.exeName) + 'Pic.jpg';
Dest:= 'D:\MyFile.jpg';
CopyFile(Source, Dest, False);
end;

khoshblagh
شنبه 20 شهریور 1389, 08:14 صبح
چرا از تابع CopyFile استفاده نمیکنید ؟

var
Source, Dest : String;
begin
Source:= ExtractFilePath(Application.exeName) + 'Pic.jpg';
Dest:= 'D:\MyFile.jpg';
CopyFile(Source, Dest, False);
end;
با تشکر از پاسختان
خطای نوع string با PAncsiChar میدهد.
متشکرم

Felony
شنبه 20 شهریور 1389, 09:35 صبح
به این صورت تغییرش بدید :

var
Source, Dest : String;
begin
Source:= ExtractFilePath(Application.exeName) + 'Pic.jpg';
Dest:= 'D:\MyFile.jpg';
CopyFile(PChar(Source), PChar(Dest), False);

khoshblagh
شنبه 20 شهریور 1389, 13:41 عصر
با تشکر
من کد را به صورت زیر نوشتم ولی فایلی ساخته نشد



var
Source, Dest : String;
begin
Source:= ExtractFilePath(Application.exeName) + 'Pic.jpg';
Dest:= ExtractFilePath(Application.exeName) + 'MyPic.jpg';
CopyFile(Pchar(Source),Pchar(Dest), False);
end

Felony
شنبه 20 شهریور 1389, 15:55 عصر
با تشکر
من کد را به صورت زیر نوشتم ولی فایلی ساخته نشد



var
Source, Dest : String;
begin
Source:= ExtractFilePath(Application.exeName) + 'Pic.jpg';
Dest:= ExtractFilePath(Application.exeName) + 'MyPic.jpg';
CopyFile(Pchar(Source),Pchar(Dest), False);
end


قرار نیست فایلی ساخته بشه ، قراره فایل Pic.jpg کپی بشه ( نام فایل جدید MyPic.jpg خواهد بود ) ، یه فایل با نام Pic.jpg کنار فایل اجرایی برنامتون بزارید و کد رو تست کنید .

khoshblagh
شنبه 20 شهریور 1389, 17:47 عصر
با عرض معذرت جمله را اصلاح میکنم. فایل مورد نظر کپی نمیشود.
جناب تاجیک من برنامه را اجرا کردم. ولی فایل مورد نظر کپی نشد. متشکرم

SAASTN
شنبه 20 شهریور 1389, 18:09 عصر
فایل مورد نظر کپی نمیشود.
توی بخشی از آدرس کلمه فارسی وجود نداره؟

آدرس مسیر جاری به هیچ عنوان تغییر نمی نماید. یعنی همیشه فایلهای مورد نظر در همان مسیر اجرای برنامه قرار دارد.
منظور چیز دیگه ای بود، سیستم همیشه یه آدرس جاری داره، وقتی شما برنامه رو اجرا می کنید این آدرس به فولدری که برنامه شما توش هست تغییر می کنه. حالا مثلا اگه بنویسید:

FileExists('Pic.jpg');
و اون فایل هم کنار Exeتون باشه خروجی تابع برابر True. اما اگه مثلا با یه OpenDialog برید به یه آدرس دیگه یا تو خود Explorer یه آدرس دیگه رو باز کنید، همون دستور بالا False برمی گردونه چون آدرس جاری سیستم تغییر کرده.

khoshblagh
یک شنبه 21 شهریور 1389, 00:13 صبح
توی بخشی از آدرس کلمه فارسی وجود نداره؟

منظور چیز دیگه ای بود، سیستم همیشه یه آدرس جاری داره، وقتی شما برنامه رو اجرا می کنید این آدرس به فولدری که برنامه شما توش هست تغییر می کنه. حالا مثلا اگه بنویسید:

FileExists('Pic.jpg');
و اون فایل هم کنار Exeتون باشه خروجی تابع برابر True. اما اگه مثلا با یه OpenDialog برید به یه آدرس دیگه یا تو خود Explorer یه آدرس دیگه رو باز کنید، همون دستور بالا False برمی گردونه چون آدرس جاری سیستم تغییر کرده.

از کلمه فارسی در آدرس استفاده نشده است.
فایلهای مورد نظر در آدرس اجرای برنامه قرار دارد و به هیج عنوان در طول برنامه مسیر تغییر نمیکند.