PDA

View Full Version : رفع مشکل خطا جستجو در همه زبانها



tcigsm
شنبه 14 اسفند 1389, 00:24 صبح
سلام

توضیح کلی:
من تعدادی فایل BIN داخل ذرایوها دارم داخل این فایلها کلمه MTK_ROMINFO وجود دارد که جلو آن ورژن فایل نوشته شده برای خواندن فایلی که مشخص کرده‌ام مشکلی وجود ندارد . من از کد زیر استفاده میکنم :



void __fastcall TForm1::Button6Click(TObject *Sender)
{
if(OpenDialog1->Execute()){
FILE *fpp;
fpp=fopen(OpenDialog1->FileName.c_str(),"r");
int mtkpos=FileSearch1(fpp,"MTK_ROMINFO");

fseek(fpp,mtkpos,0);

char *d,*cpui;
cpui=new char[10];
d=new char [0x90];
fread(d,0x80,1,fpp);
d+=1+strlen(d);
MemoI->Text="Original File Name: "+String(d);
cpui=strstr(d,"MT62");
cpui[6]=0;
MemoI->Text=MemoI->Text+"\r\nCPU: "+String(cpui);
MemoI->Text=MemoI->Text+"\r\nVersion: "+String(d[13])+String(d[14]);
MemoI->Text=MemoI->Text+"\r\nFile Size: "+String(filesize1/1000000)+"MB";
fclose(fpp);

خوب حالا دکمه‌ایی برای جستجوی فایلهای BIN گذاشتم که در مسیری که مشخص کرده‌ام بدنبال فایل Bin میگرده و ورژن اونو شناسایی میکنه و وارد txt.bin میکنه.


void __fastcall TForm1::Button7Click(TObject *Sender)

{
asdss=1;
Button2->Enabled=1;
HWND asd;
ShellExecuteA(asd,"OPEN","cmd.exe",(" /c dir /b /s "+DirectoryListBox1->Directory+"\\*.bin > \""+ExtractFileDir(_argv[0])+"\\bin.txt\"").c_str(),NULL,SW_HIDE);
while(!FileExists(ExtractFileDir(_argv[0])+"\\bin.txt")) {
Sleep(10);
}
Memo7->Lines->LoadFromFile(ExtractFileDir(_argv[0])+"\\bin.txt");
DeleteFileA(ExtractFileDir(_argv[0])+"\\bin.txt");
MemoI->Text="";
int i=2;
_beginthread(thread_code,4096,(void *)i);
من بابت این هیچ مشکلی ندارم ، مشکل اصلی من اینه که زمانی که به فایلی برخورد میکنه که نام فایل رو به زبال فارسی یا چینی نوشته شده باشه پیغام خطا میده و از برنامه خارج میشه!!.
ممنون میشو اگه این مشکلو برام حل کنید؟؟؟

tdkhakpur
شنبه 14 اسفند 1389, 01:15 صبح
مشکل اصلی من اینه که زمانی که به فایلی برخورد میکنه که نام فایل رو به زبال فارسی یا چینی نوشته شده باشه پیغام خطا میده و از برنامه خارج میشه!!.


دلیلش این هست که شما از بورلندی استفاده میکنید که پشتیبانی برای یونیکد نداره یعنی openDialog کنونی که ازش استفاده میکنید از c_str استفاده میکنه و گزینه ای برای یونیکد بصورت w_char نداره.
بهتره به ورژن بالاتر صعودی داشته باشید یا اینکه از کامپوننتهایی استفاده کنید که از یونیکد پشتیبانی کنند.

tcigsm
شنبه 14 اسفند 1389, 18:32 عصر
سلام
دوست عزیز من فعلا امکان ارتقاء ندارم اگه میشه لطف کنید بگید از چه کامپوننتی استفاده کنم؟
با تشکر

BORHAN TEC
چهارشنبه 18 اسفند 1389, 10:34 صبح
دوست عزیز من فعلا امکان ارتقاء ندارم اگه میشه لطف کنید بگید از چه کامپوننتی استفاده کنم؟
شما می توانید از کامپوننت های TNT استفاده کنید ولی به هر حال بهترین روش این است که از نسخه های جدید C++Builder استفاده کنید یعنی نسخه 2009 و یا نسخه های بعدی ولی پیشنهاد می کنم که اگر قصد ارتقا دارید نسخه XE را انتخاب کنید.