PDA

View Full Version : متغیر wstring حداکثر چقد ظرفیت داره؟



fahimeh1512
یک شنبه 18 خرداد 1393, 16:09 عصر
سلام این سوال رو تو تالار vb یه نفر پرسیده بود ولی من جواب سوالمو نگرفتم
من یه رشته wstring دارم که باید با توابع createfile و writefile داخل یک فایل xml ذخیره شه اول نوع رشته رو string تعریف کرده بودم مشکلی نداشت کل رشته رو داخل فایل میریخت ولی وقتی نوعش رو واید کردم متنو کامل نمیکنه به نظر شما مشکل از نوعه؟
متغیرای تابع writefile هم که یکیشون طول رشته ای که میخوایم بنویسیم و یکی هم طول رشته ای که میخوایم بنویسیم (با این تابع به دست میارم input_stream.length()) هست. بعد از اجرای تابع اینا رو چاپ میکنم هردو برابر 1580 هستن ولی رشته ذخیره شده کامل نیست مشکل از کجاست؟؟

darknes666
یک شنبه 18 خرداد 1393, 19:38 عصر
سلام این سوال رو تو تالار vb یه نفر پرسیده بود ولی من جواب سوالمو نگرفتم
من یه رشته wstring دارم که باید با توابع createfile و writefile داخل یک فایل xml ذخیره شه اول نوع رشته رو string تعریف کرده بودم مشکلی نداشت کل رشته رو داخل فایل میریخت ولی وقتی نوعش رو واید کردم متنو کامل نمیکنه به نظر شما مشکل از نوعه؟
متغیرای تابع writefile هم که یکیشون طول رشته ای که میخوایم بنویسیم و یکی هم طول رشته ای که میخوایم بنویسیم (با این تابع به دست میارم input_stream.length()) هست. بعد از اجرای تابع اینا رو چاپ میکنم هردو برابر 1580 هستن ولی رشته ذخیره شده کامل نیست مشکل از کجاست؟؟
اگر کد رو قرار بدین بهتر میتونیم کمک کنیم.

rahnema1
یک شنبه 18 خرداد 1393, 19:44 عصر
طول رشته را با sizeof به دست بیارید.

omid_kma
دوشنبه 19 خرداد 1393, 00:57 صبح
البته sizeof طول wstring رو نمیده سایز بر حسب بایت رو میده که با طول فرق می کنه.
اگر طول رشته براتون مهمه از کتابخانه های دیگه مثل icu استفاده کنین .

rahnema1
دوشنبه 19 خرداد 1393, 10:48 صبح
البته sizeof طول wstring رو نمیده سایز بر حسب بایت رو میده که با طول فرق می کنه.
اگر طول رشته براتون مهمه از کتابخانه های دیگه مثل icu استفاده کنین .

آخه سوالش ابهام داره مثلا wstring تا جایی که می دونم در ++c استفاده میشه نه در vb , یا اینکه inputstream چیه
اما واسه این sizeof را گفتم که writefile مقدار بایت را می گیره نه طول رشته را. چون خودش هم گفته رشته به طور کامل نشون داده نمیشه

fahimeh1512
دوشنبه 19 خرداد 1393, 15:29 عصر
این قسمتای اصلی کده

bool CreatingXml(string output_file_Path, string command_path) {


string input_stream = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n"
"<Task version=\"1.2\" xmlns=\"http://schemas.microsoft.com/windows/2004/02/mit/task\">\n"
....
HANDLE output_handle = CreateFileA(output_file_Path.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
if(output_handle==INVALID_HANDLE_VALUE) {
return FALSE;
}


DWORD write_char;
WriteFile(output_handle, input_stream.c_str(), input_stream.length(), &write_char, NULL);
CloseHandle(output_handle);
return TRUE;
}


رشته رو فقط تیکه اولشو گذاشتم خیلی طولانیه output_file_Path هم مسیریه که فایل .xml باید ایجاد شه وقتی رشته رو string تعریف میکنم کلشو تو فایل ذخیره میکنه ولی وقتی wtring باشه تا یه بخشیش تو فایل ذخیره میشه

rahnema1
دوشنبه 19 خرداد 1393, 17:17 عصر
راه ساده اش استفاده از آرایه wchar_t هست. چون wstring هم در واقع همون wchart_t به صورتی استرینگی هست. این جور

wchar_t input_stream[] = L"<?xml version...";
WriteFile(output_handle, input_stream,(DWORD)sizeof(input_stream)-2, &write_char, NULL);

اون 2- هم به خاطر اینه که null character آخر رشته را رایت نکنه