PDA

View Full Version : حرفه ای: خطا دادن به حرف "ی " لطفا بخونید!



Hashemvp
یک شنبه 10 اردیبهشت 1391, 20:26 عصر
سلام به همه ی دوستان
من یه برنامه داشتم مینوشتم که کاربر یه مسیر رو وراد میکنه و برنامه باید بگه که این مسیر وراد شده درست است یا نه
برای این کار هم زا این کد استفاده کردم


Public Function HvP_IsADirectory(ByVal thename As String) As Boolean
On Error GoTo HErr
If GetAttr(thename) And vbDirectory Then
HvP_IsADirectory = True
End If
Exit Function
HErr:
HvP_ErrIsDir = Err.Number
HvP_ErrIsDirDes = Err.Description
End Function



حالا مشگل سر این است که اگر کاربر یه مسیری رو مثل این رو وارد کنه



C:\ی
یا
C:\new\هاشمی

اینو شناسایی نمیکنه و پیغام خطا میده فقط بخاطر اینکه کاراکتر "ی " با کد اسکی 237 توی این مسیر هست.

دوستان کسی هست که بتونه راهنمایی کنه که این مشگل حل بشه؟

من اول خواستم برنامه به صورت خودکار پوشه مورد نظر رو تغییر نام بده و به "ی " عربی که 2 نقطه زیر ی هست تبدیل کنه که مشگل حل بشه و کلا به این "ی حساسیت داره و هر جا باشه پیغام خطا میده

برای شناسایی اینکه فایل وجود دارد یا نه مشگلی نداره چون از API استفاده شده ولی API برای این کار پیدا نکردم مگر مشگل حل میشه
ممنون میشم کمکم کنید

ameri110
یک شنبه 10 اردیبهشت 1391, 21:48 عصر
اگه اینپوت تکست باکس تو خود برنامس میتونی وقتی ی تایپ میشه همون موقع اونو به ي تبدیل کنی دقیقا مثل سایت سنجش یا ایران کد
ولی اگه می خواهی کد اسکی ی مجاز رو بدست بیاری یک فولدیر که ی یا ي داره رو اسمش رو تو یه استرینگ ذخیره کن و کدش رو بگیر

Hashemvp
یک شنبه 10 اردیبهشت 1391, 22:21 عصر
اگه اینپوت تکست باکس تو خود برنامس میتونی وقتی ی تایپ میشه همون موقع اونو به ي تبدیل کنی دقیقا مثل سایت سنجش یا ایران کد
ولی اگه می خواهی کد اسکی ی مجاز رو بدست بیاری یک فولدیر که ی یا ي داره رو اسمش رو تو یه استرینگ ذخیره کن و کدش رو بگیر

دوست عزیز من پاسختون انگار من خوب توضیح ندادم.الان بیشتر توضیح میدم.
این کاری هم که شما گفتید انجام دادم راه های مختلفی رو امتجان کردم مثل استفاده از shell , FSO
ولی بازم جواب نداد.

نکته دیگه اینکه این کاری که شما گفتید درسته میشه ولی در صورتی که برنامه پوشه رو بسازه
که برنامه اینکارو نمیکنه و لازم هم نمیشه که بخواد انجام بده.
اگه اینکارو برنامه بکنه پیغام خطا میکنه مسیر اشتباه و درست هم هست چون یه کاراکتر با پوشه اصلی فرقشونه
به طور مثال شما توی درایو D یه پوشه به اسم "هاشمی " دارید.
حالا میایید توی این برنامه ادرس این پوشه رو میدید که یکسری فایل ها رو اینجا ذخیره کنه برنامه

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

جواب خیر رو میده و به کاربر میگه مسیر وراد شده اشتباه در صورتی که اشتباه نیست.

امید وارم که به خوبی توضیح داده باشم

بازم ممنون

ASedJavad
یک شنبه 10 اردیبهشت 1391, 23:52 عصر
سلام

مشابه این بحث زیاد مطرح شده ولی تقریبا همشون بی نتیجه بودن

بعید می دونم بشه کاری کرد


درضمن یه توصیه برادرانه
تو نوشتن متنات یه خورده بیشتر دقت کن
پدرم در اومد تا فهمیدم چی میگی!

Hashemvp
دوشنبه 11 اردیبهشت 1391, 00:28 صبح
سلام

مشابه این بحث زیاد مطرح شده ولی تقریبا همشون بی نتیجه بودن

بعید می دونم بشه کاری کرد


درضمن یه توصیه برادرانه
تو نوشتن متنات یه خورده بیشتر دقت کن
پدرم در اومد تا فهمیدم چی میگی!

سلام دوست عزیز ممنون چشم

اینم باید بگم که این خطا رو میده

Run Time error '53'

File not found

خوب یعنی اینکه به طرف بگم برنامه نمیتونه حرف "ی "بشناسه لطفا از این کاراکتر استفاده نکن!!!!!!

حتما باید راهی باشه مشگل اینجاست که هیچ کدوم از dll ها و اینا نمیتونن اینو بشناسن که حداقل بتونم تغییر نام خودکار صورت بگیره
مشگلم فقط با پوشه ای هست که این کاراکتر رو داره مگر نه با فایل هیچ مشگلی ندراه چون از API استفاده شده و مال خوده ویندوزه این پوشه ....... درست نمیشه لطفا لطفا راهی نظری پیشنهادی
یه طوری به هر حال میشه اینو دور زد هیچ چیزی نشد نداره منتها من راه های زیادی رو تست کردم و جواب نداد به این خاطر درام مطرح میکنم این مسئله رو.

بازم ممنون از دوستان که نظر دادن

Hashemvp
دوشنبه 11 اردیبهشت 1391, 06:29 صبح
دوستان خودم یه راه حل براش پیدا کردم و جواب میده
باید کاراکتر حرف "ی " رو به صورت یونیکد در بیاری تا مشگل حل بشه
موفق باشید

Mr'Jamshidy
دوشنبه 11 اردیبهشت 1391, 13:44 عصر
ببین دوست من یک زمانی یک بنده خدایی با من در مورد همین موضوع صحبت کرد، ولی مشکل طرف کپی کردن فایل بود نه پیدا کردن

من هم یک تابع براش نوشتم و بهش دادم

برای شما هم میزارم ببین دا دردت میخوره یا نه

Private Sub Copy_File(SrcPath As String, DestPath As String)
Dim SourcePath() As Byte
Dim DestinationPath() As Byte
SourcePath = Replace(SrcPath, "ي", ChrW(1740))
DestinationPath = Replace(DestPath, "ي", ChrW(1740))
Shell "cmd.exe /c copy " & Chr(34) & CStr(SourcePath) & Chr(34) & " " & Chr(34) & CStr(DestinationPath) & Chr(34), vbHide
End Sub

Private Sub Command2_Click()
Copy_File "C:\test\test1\ي.txt", "C:\test\test1\يي.txt"
End Sub

Hashemvp
دوشنبه 11 اردیبهشت 1391, 17:15 عصر
ببین دوست من یک زمانی یک بنده خدایی با من در مورد همین موضوع صحبت کرد، ولی مشکل طرف کپی کردن فایل بود نه پیدا کردن

من هم یک تابع براش نوشتم و بهش دادم

برای شما هم میزارم ببین دا دردت میخوره یا نه

Private Sub Copy_File(SrcPath As String, DestPath As String)
Dim SourcePath() As Byte
Dim DestinationPath() As Byte
SourcePath = Replace(SrcPath, "ي", ChrW(1740))
DestinationPath = Replace(DestPath, "ي", ChrW(1740))
Shell "cmd.exe /c copy " & Chr(34) & CStr(SourcePath) & Chr(34) & " " & Chr(34) & CStr(DestinationPath) & Chr(34), vbHide
End Sub

Private Sub Command2_Click()
Copy_File "C:\test\test1\ي.txt", "C:\test\test1\يي.txt"
End Sub

دوست عزیز سپاس فراوان از شما واقعا ممنون
من برای پشتیبان گیری از بانک میخواستم پوشه رو چک کنه که ببین وجود داره یا نه بعد دیدم نمیشه از یه همچنین روشی استفاده کردم و کارم راه افتاد.
بازم ممنون که پاسخ دادین
موفق باشید