نمایش نتایج 1 تا 15 از 15

نام تاپیک: كپي كردن فايل با اسم فارسي

  1. #1
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    كپي كردن فايل با اسم فارسي

    برخي از كاركترها نظير اين "ﯼ" كه نوشتم در صورتيكه در اسم فايل وجود داشته باشد (يا اسم فولدري كه اين فايل در آن هست) با دستور CopyFile ، كپي نمي‌گردد. در اين خصوص كسي كمكي مي‌تونه بكنه ؟

  2. #2

    نقل قول: كپي كردن فايل با اسم فارسي

    تو چه ویندوزی ؟ کدوم نسخه از دلفی ؟

    از دلفی 2009 یا 2010 که از یونیکد پشتیبانی میکنن استفاده کنید .

  3. #3

    نقل قول: كپي كردن فايل با اسم فارسي

    از چه نسخه ایی از دلفی استفاده می کنید؟

    اگر از نسخه یونیکد API مربوطه که نام فایل ها را به صورت PWideChar دریافت میکنه، استفاده کنید، نباید مشکل خاصی با کارکترهای فارسی داشته باشید. البته CopyFile یک تابع API ویندوز نیست، و مربوط به خودِ دلفی هست، ولی در داخل خودش از تابع API ویندوز استفاده میکنه. فکر کنم اسم تابع API اش FileCopy بود.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  4. #4
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    نقل قول: كپي كردن فايل با اسم فارسي

    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    از چه نسخه ایی از دلفی استفاده می کنید؟

    اگر از نسخه یونیکد API مربوطه که نام فایل ها را به صورت PWideChar دریافت میکنه، استفاده کنید، نباید مشکل خاصی با کارکترهای فارسی داشته باشید. البته CopyFile یک تابع API ویندوز نیست، و مربوط به خودِ دلفی هست، ولی در داخل خودش از تابع API ویندوز استفاده میکنه. فکر کنم اسم تابع API اش FileCopy بود.

    نسخه دلفي 7 مي‌باشد. چون نرم‌افزار به صورت client-server است روي گونه‌هاي مختلف ويندوز بايستي پشتيباني شود. در ضمن با توجه به تعداد خطوط بالاي اين application امكان استفاده از نسخ بالاتر دلفي وجود ندارد.
    من فكر مي كردم دستور copyfile يك api است. اگر بود كه مشكلي نداشت چون خود ويندوز اين مشكل را ندارد و فايل را راحت كپي مي‌كند. خوب از اين نسخه يونيكد چطور مي‌شه استفاده كرد؟ مثالي داريد؟

  5. #5

    نقل قول: كپي كردن فايل با اسم فارسي

    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    از چه نسخه ایی از دلفی استفاده می کنید؟

    اگر از نسخه یونیکد API مربوطه که نام فایل ها را به صورت PWideChar دریافت میکنه، استفاده کنید، نباید مشکل خاصی با کارکترهای فارسی داشته باشید. البته CopyFile یک تابع API ویندوز نیست، و مربوط به خودِ دلفی هست، ولی در داخل خودش از تابع API ویندوز استفاده میکنه. فکر کنم اسم تابع API اش FileCopy بود.
    حاج علی ، CopyFile جزء API ها هست : http://msdn.microsoft.com/en-us/libr...51(VS.85).aspx

    نقل قول نوشته شده توسط SReza1 مشاهده تاپیک
    نسخه دلفي 7 مي‌باشد. چون نرم‌افزار به صورت client-server است روي گونه‌هاي مختلف ويندوز بايستي پشتيباني شود. در ضمن با توجه به تعداد خطوط بالاي اين application امكان استفاده از نسخ بالاتر دلفي وجود ندارد.
    من فكر مي كردم دستور copyfile يك api است. اگر بود كه مشكلي نداشت چون خود ويندوز اين مشكل را ندارد و فايل را راحت كپي مي‌كند. خوب از اين نسخه يونيكد چطور مي‌شه استفاده كرد؟ مثالي داريد؟
    نسخه یونیکد تابع میشه CopyFileW ، همه چیز توضیح داده شد ، خودتون کد رو بنویسید .
    آخرین ویرایش به وسیله Felony : پنج شنبه 20 آبان 1389 در 20:53 عصر

  6. #6
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    نقل قول: كپي كردن فايل با اسم فارسي

    اينم كدش ولي باز هم كار نمي‌كنه!! اگه تو اسم فايلتون اون نوع كاركترها باشه نميشه

    procedure TForm1.Button1Click(Sender: TObject);
    var
    iNewSize : integer;
    begin
    if OpenDialog1.Execute then
    CopyFileW(StringToPWide(OpenDialog1.FileName, iNewSize), StringToPWide('C:\1000.txt', iNewSize), False);
    end;


    function TForm1.StringToPWide( sStr: string; var iNewSize: integer ): PWideChar;
    var
    pw : PWideChar;
    iSize : integer;
    begin
    {String to PWideChar, NB memory allocated must be freed by caller}
    iSize := Length( sStr ) + 1;
    iNewSize := iSize * 2;

    {Allocate memory}
    pw := AllocMem(iNewSize);

    {Do conversion}
    MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize );

    Result := pw;
    end;
    آخرین ویرایش به وسیله SReza1 : شنبه 22 آبان 1389 در 10:05 صبح

  7. #7

    نقل قول: كپي كردن فايل با اسم فارسي

    اينم كدش ولي باز هم كار نمي‌كنه!! اگه تو اسم فايلتون اون نوع كاركترها باشه نميشه
    علتش اینه که برای تبدیل ANSI به یونیکد، شما از CodePage پیش فرض سیستم استفاده می کنید (CP_ACP). در این حالت، کارکترهای فارسی در آدرس های بین 127 تا 255 از جدول کارکترهای ANSI نگاشت میشند. کارکتر ی شما، یک کارکتر عربی (با کد یونیکد 064A) هست. سیستم نمیتونه این کارکتر رو با CodePage فعلی به درستی نگاشت کنه، پس به جای اون، یک ? دریافت می کنید. فایلی هم با اون نام پیدا نمیشه.

    من با استفاده از Delphi 2010 امتحان کردم، بدون مشکل فایل رو کپی کرد. در Delphi 7 هم با استفاده از TntOpenDialg و FileCopyW امتحان کردم، به درستی عمل کرد. اما دریافت نام فایل با استفاده از OpenDialog در Delphi 7، و سپس تبدیل ANSI String مربوطه به WideString، موجب بروز خطا، مبنی بر پیدا نشدن فایل، میشه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  8. #8
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    نقل قول: كپي كردن فايل با اسم فارسي

    ممنون حاج علي
    با استفاده از tntDialog اين مشكل حل شد. ظاهرا راه ديگه‌اي وجود ندارد. شايد اگر در opendialog معمولي نوع TFileName بجاي string از wideString استفاده مي‌كردند اين dialog نيز درست كار مي‌كرد.

  9. #9
    کاربر دائمی آواتار nilidelphi
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    ارومیه
    پست
    418

    Question نقل قول: كپي كردن فايل با اسم فارسي

    من یکم گیج شدم....!!!

    من از دلفی 2009 استفاده می کنم حالا اگه از یک OpenDialog معمولی استفاده کنم آیا میشه از مسیر فایل های فارسی استفاده کرد یا باید بازهم از TntDialog استفاده کنم؟

  10. #10

    نقل قول: كپي كردن فايل با اسم فارسي

    نقل قول نوشته شده توسط nilidelphi مشاهده تاپیک
    من یکم گیج شدم....!!!

    من از دلفی 2009 استفاده می کنم حالا اگه از یک OpenDialog معمولی استفاده کنم آیا میشه از مسیر فایل های فارسی استفاده کرد یا باید بازهم از TntDialog استفاده کنم؟
    دلفی 2009 یونیکد هست و نباید مشکلی داشته باشه .

  11. #11
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1385
    پست
    41

    نقل قول: كپي كردن فايل با اسم فارسي

    سلام دوستان من همه کارهایی رو که بالا گفتید انجام دادم
    با دلفی7 و کامپوننت TnyOpenDialog هم مسیر رو می گیرم ولی باز هم اگر اسم فولدر یا فایلم فارسی باشه عمل کپی انجام نمی شه!!! ولی اگر فارسی نداشته باشه درست عمل می کنه من امکان استفاده از ورژن بالاتر دلفی رو ندارم آیا راه حل دیگه ای هست یا آبرو حیثیتمونو از دست میدیم جلو مشتری؟
    کدی که استفاده کردم :



    procedure TForm1.btn1Click(Sender: TObject);
    var
    iNewSize : integer;
    begin

    if tndlgOpenDialog.Execute then
    CopyFileW( StringToPWide(tndlgOpenDialog.FileName, iNewSize),
    StringToPWide('D:\FileCopy\t.txt', iNewSize), False);
    end;



    function TForm1.StringToPWide( sStr: string; var iNewSize: integer ): PWideChar;
    var
    pw : PWideChar;
    iSize : integer;
    begin
    {String to PWideChar, NB memory allocated must be freed by caller}
    iSize := Length( sStr ) + 1;
    iNewSize := iSize * 2;
    {Allocate memory}
    pw := AllocMem(iNewSize);
    {Do conversion}
    MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize );
    Result := pw;
    end;


  12. #12

    نقل قول: كپي كردن فايل با اسم فارسي

    قسمت کپی فایل رو با دلفی 2009 به بالا در یه dll بساز و با دلفی 7 وصل شو به dll و عملیات کپی رو انجام بده.
    فقط حواست باشه متغیرات رو باید ansistring بگیری.
    موفق باشید.


  13. #13
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1385
    پست
    41

    نقل قول: كپي كردن فايل با اسم فارسي

    اوکی ممنون می رم تست کنم

  14. #14
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1385
    پست
    41

    نقل قول: كپي كردن فايل با اسم فارسي

    اوکی شدم با Tnt جواب گرفتم
    با DLL نه!! نمی دونمم چرا فقط چیزی که فهمیدم اینه که کلا این PWideChar ها خیلی حساسند با کدی که زیر نوشتم قشنگ کار می کنه ولی
    وقتی بخوای به عنوان پارامتر به یه تابع دیگه یا یه دی ال ال پاسش کنی دیگه کار نمی کنه!!! اصلا منطقی نیست!!


    CopyFileW( PWideChar(ttdlg1.filename), 'D:\FileCopy\d.txt', False);


    تشکر از همه دوستان..

  15. #15

    نقل قول: كپي كردن فايل با اسم فارسي

    نقل قول نوشته شده توسط SirMehdi مشاهده تاپیک
    اوکی شدم با Tnt جواب گرفتم
    با DLL نه!! نمی دونمم چرا فقط چیزی که فهمیدم اینه که کلا این PWideChar ها خیلی حساسند با کدی که زیر نوشتم قشنگ کار می کنه ولی
    وقتی بخوای به عنوان پارامتر به یه تابع دیگه یا یه دی ال ال پاسش کنی دیگه کار نمی کنه!!! اصلا منطقی نیست!!


    CopyFileW( PWideChar(ttdlg1.filename), 'D:\FileCopy\d.txt', False);


    تشکر از همه دوستان..
    مهندس سلام بنده این مشکل را در کپی کردن , یا تغییر نام دادن فایل های تصویری که در اسم فایل و یا پوشه آن[ ی] فارسی هست دارم فرمودید ار
    TntOpenDialg بجای OpenDialg استفاده کنم لطفا آدرس دانلود این کامپوننت را برای می گذارید


برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •