PDA

View Full Version : مطابق این دستور C++ تو C# چیه؟



benyamin_pc
سه شنبه 06 آذر 1386, 18:21 عصر
p2.write((char *)struct name,sizeof(struct name));

منجر میشه تا یه ساختمان به صورت رشته ای از محتویاتش تو یه فایل ذخیره شه

MH2538
چهارشنبه 07 آذر 1386, 06:40 صبح
شما مشخص نکری p2 دقیقاً چیه

Inprise
چهارشنبه 07 آذر 1386, 20:31 عصر
شما مشخص نکری p2 دقیقاً چیه

بدیهی هست که p2 یک file یا filestream یا کنسول و هم خانواده هاش هست


مطابق این دستور C++ تو C# چیه؟

اولا میتونی همین کد سی ات رو بصورت unsafe استفاده کنی
دوما میتونی یک StructFile تعریف کنی که از Struct ات استفاده میکنه و با BinaryWrite هم بنویسیش .

benyamin_pc
چهارشنبه 07 آذر 1386, 23:29 عصر
با سلام
unsafe چطوریه؟یعنی تمام دستورات سی پلاس پلاس رو تو سی شارپ هم میشه به کار برد؟
structFile چجوری میشه تعریف کرد؟و دقیقا" کارش چیه؟

benyamin_pc
پنج شنبه 08 آذر 1386, 10:00 صبح
هر کس در مورد نحوه ذخیره سازی یه struct و بازیافتش می دونه لطفا" راهنمایی کنه خیلی آخه عجله دارم.

PC2st
پنج شنبه 08 آذر 1386, 10:46 صبح
unsafe چطوریه؟یعنی تمام دستورات سی پلاس پلاس رو تو سی شارپ هم میشه به کار برد؟نه همه دستورات... کدهای unsafe کدهایی حاوی اشاره گرها هستند.


هر کس در مورد نحوه ذخیره سازی یه struct و بازیافتش می دونه لطفا" راهنمایی کنه خیلی آخه عجله دارم.هر کس در مورد نحوه ذخیره سازی یه struct و بازیافتش می دونه لطفا" راهنمایی کنه خیلی آخه عجله دارم.
در همین سایت یا در MSDN عبارت BinaryFormatter رو جستجو کنید (یک کلاس در دات نت).

benyamin_pc
پنج شنبه 08 آذر 1386, 10:50 صبح
حالا یعنی همین دستور را اگه به کار ببرم باید کار کنه؟
اما کار نمی کنه
اگه ممکنه بگین چجوری از همین دستور خودم میتونم استفاده کنم؟

benyamin_pc
پنج شنبه 08 آذر 1386, 10:59 صبح
string strFileName = "StoreItems.sti";
FileStream fStream = new FileStream(strFileName,FileMode.Create);
BinaryFormatter binFormat = new BinaryFormatter();

try
{
binFormat.Serialize(fStream,this.lstStoreItems);
}
catch(ArgumentNullException)
{
MessageBox.Show("دسترسی به ذخایر امکان پذیر نیست","خطا ");
}
catch(SerializationException)
{
MessageBox.Show("امکان ذخیره اطلاعات وجود ندارد","خطا ");
}
finally
{
fStream.Close();
}

در مورد اون یکی مدل هم اینهارو پیدا کردم
اما این چجوری یه Struct رو ذخیره می کنه؟پس اسم Struct کجاشه؟

PC2st
پنج شنبه 08 آذر 1386, 11:03 صبح
متد Write از FileStream (یا کلاس Stream) چنین پارامترهایی رو نداره و در واقع سه پارامتر میگیره و فکر نمیکنم بشه دقیقا همین کد رو در سی# کپی/پیست کرد.

PC2st
پنج شنبه 08 آذر 1386, 11:05 صبح
در کدی که نوشتید، this.lstStoreItems همون struct میتونه باشه.

benyamin_pc
پنج شنبه 08 آذر 1386, 11:35 صبح
دستت درد نکنه ممنون
اما حالا چرا ساختار معمولی و راحتتر سی پلاس پلاس رو عوض کردن و با یه کار اضافی باید همون کار رو کرد؟
راستی اگه همون کد سی پلاس پلاس یا شبیه اون رو هم میشه استفاده کرد لطفا" بگین به چه شکل؟

PC2st
پنج شنبه 08 آذر 1386, 21:34 عصر
مثلا اگه ساختاری بنام UserData داشته باشیم، میشه از متد زیر استفاده کرد:


unsafe static void StructToFile(UserData udat)
{
char* p = (char*)&udat;
for(int i = 0; i < sizeof(UserData); i += 2, p++)
{
System.Console.Write("{0}", *p);
}
}

بجای System.Console.Write محتویات رو در یک فایل ذخیره کن.

برای اینکه بشه از کد unsafe استفاده کرد، باید گزینه Allow unsafe code از قسمت Properties -> Build انتخاب شده باشه.