PDA

View Full Version : سوال: مشکل کپی فایل فارسیییی



sara66
سه شنبه 22 مرداد 1392, 12:29 عصر
سلام ، XE4 نصب دارم ، میخوام فایلی را کپی کنم که فارسی نوشته شده و داخلش حرف ی هم هست اما کپی نمیشه !
جای دیگه هم میخوام فایل های فارسی را زیپ کنم اما نمیشه !!!!!!!! امکان انگلیسی کردن نام فایل نیست.

چکار کنم ؟!
مرسی

BORHAN TEC
سه شنبه 22 مرداد 1392, 12:31 عصر
سلام
لطفاً کدتون رو برای بررسی قرار بدین.

sara66
سه شنبه 22 مرداد 1392, 12:51 عصر
تابع زیر فایل سرچ می کنه که برای فایل های فارسی جواب نمیده ، یعنی اون فایل فارسی را پیدامی کنه اما وقتی اون آدرس را توی برنامه میخوام کپی یا زیپ کنم خطا میده !


procedure TForm1.FileSearch(const PathName, FileName : string);
var
Rec: TSearchRec;
Path: string;
begin
Path := IncludeTrailingPathDelimiter(PathName);
if FindFirst(Path + FileName, faAnyFile - faDirectory , Rec) = 0 then
begin
try
repeat
Fileslist.Add(Path + Rec.Name);
Application.ProcessMessages;
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;

{SubFolders}
if 1=1 then
begin
if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
begin
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name <> '.') and (Rec.Name <> '..') then
begin
FileSearch(Path + Rec.Name, FileName);
Application.ProcessMessages;
end;
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;
end;
end;



مثلا فایل های doc را با این سرچ می کنم و پیدا هم می کنه ، ظاهرا فایل فارسی هم پیدا می کنه اما با اون آدرسی که پیدا کرده نه میشه کپی کرد نه زیپ ! یعنی اون آدرس فایل فارسی معتبر نیست ! نمیدونم چرا اینجوری هست !

BORHAN TEC
سه شنبه 22 مرداد 1392, 13:43 عصر
به یاد داشته باشید که اگر از دلفی 2010 و یا نسخه های جدیدتر استفاده می کنید بهتر است که از روش دیگری استفاده کنید.
و اما در مورد XE4:
uses
System.SysUtils,
System.IOUtils;

var
S: string;
SourceDirectory: string;

begin
SourceDirectory := 'C:\Debug';
for S in TDirectory.GetFiles(SourceDirectory, TSearchOption.soAllDirectories,
function(const path: string; const SearchRec: TSearchRec): Boolean
begin
Result := True;
// Or
// Result := (Pos('tch', SearchRec.Name) >= 1);
end) do
begin
Writeln(S);
end;

Readln;

end.
همانطور که میبینید من این کد رو در محیط کنسول تست کرده ام. موقع اجرا میبینید که متون فارسی به صورت ؟؟؟؟؟؟؟؟؟؟؟؟؟؟ نشون داده میشه و این موضوع به مشکل ذاتی کنسول در ویندوز برمیگرده و هیچ ربطی به دلفی و سایر محصولات دیگه نداره. :چشمک:

sara66
سه شنبه 22 مرداد 1392, 14:12 عصر
اما برنامه من در کنسول اجرا نمیشه ! برنامه vcl ویندوز هست و delphi XE4

BORHAN TEC
سه شنبه 22 مرداد 1392, 14:14 عصر
اما برنامه من در کنسول اجرا نمیشه ! برنامه vcl ویندوز هست و delphi XE4
خوب چه فرقی می کنه؟ از کد بالا توی یک برنامه ویژوال استفاده کنید.

sara66
سه شنبه 22 مرداد 1392, 15:04 عصر
خوب راه حل چیه ؟!!! نمیشه کلا ؟

BORHAN TEC
سه شنبه 22 مرداد 1392, 15:26 عصر
خوب راه حل چیه ؟!!! نمیشه کلا ؟
چی نمیشه؟ الان که دیگه مشکلی وجود نداره که. کدهایی که قرار دادم بدون مشکل در پروژه های VCL Forms Application کار میکنه! تنها مسئله این بود که کنسول نمیتونه متون فارسی رو درست نشون بده که این مورد هم مشکل ذاتی ویندوزه و ربطی به دلفی، Qt، Visual Studio و ... نداره. الان دیگه چه مشکلی وجود داره؟ :متفکر:

sara66
سه شنبه 22 مرداد 1392, 15:31 عصر
این کدی که نوشتین چجوری کار می کنه !!! توی همه سیستم عامل ها جواب میده ؟ چجوری باید پسوند را مشخص کنم ؟ همه ی زیر شاخه ها را هم سرچ می کنه ؟ اگر بخوام توی همه درایو ها سرچ کنم باید تک تک نام درایو ها را بنویسم ؟

برای کپی کردن فایل های فارسی از همون copy استفاده کنم ؟ برای زیپ کردن هم TZipFile استفاده می کنم با فارسی مشکل داره کاراکتر های عجیب میزنه بعد از زیپ کردن

sara66
سه شنبه 22 مرداد 1392, 16:14 عصر
سرچ شما هم مشکل داره !
فایل های فارسی را پیدا می کنه اما مسیر اونها درست نیست ! با چشم درست داده میشه اما وقتی اون مسیر را میخوای باز کنی (مثلا یک فایل txt باشه) خطا میده ! من مسیر یکی از فایل های فارسی که پیدا کرد را کپی کردم و خواستم توی ویندوز بازش کنم که خطا داد

BORHAN TEC
سه شنبه 22 مرداد 1392, 18:53 عصر
من که همین کد رو چک کردم و مشکلی نداشت. از چه نسخه ای از ویندوز استفاده میکنید؟

sara66
سه شنبه 22 مرداد 1392, 20:41 عصر
ویندوز سون
من این آدرس هایی که پیدا میشه را داخل TStringList ذخیره می کنم ، شاید اون با فارسی مشکل داره ؟

gholami146
سه شنبه 22 مرداد 1392, 21:15 عصر
با این کد میشه با استفاده از برنامه کپی فعال ویندوز عمل کپی یک دایرکتوری رو انجام داد حتی فارسی رو
function CopyDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_COPY;
fFlags := FOF_FILESONLY;
pFrom := PChar(fromDir + #0);
pTo := PChar(toDir)
end;
Result := (0 = ShFileOperation(fos));
end;

loo30fer
چهارشنبه 23 مرداد 1392, 16:01 عصر
نمونه براتون ضمیمه کردم

sara66
پنج شنبه 31 مرداد 1392, 15:10 عصر
مرسی
مشکل وقتی رخ میده که میخوام آدرس فایل های فارسی را داخل فایل ذخیره کنم
وقتی توی فایل مسیر های فارسی را ذخیره می کنم بهم میریزه