Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> مسایل عمومی کامپیوتر -> درخواست کمک در VC#
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي
برو به صفحه قبلي  1, 2, 3  بعدي

نويسنده
پيغام
Parham
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


جمعه 11 فروردين 1391 - 00:25
پاسخ بصورت نقل قول
اگر توضیح بدید ممنون می شم ماهان جان،من با فایلها در وی بی کار کردم و در سی شارپ ازشون زیاد سر در نمی آرم.
امیدوارم بتونم از اون namespaceی که گفتی بتونم تیوتوریل پیدا کنم.

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
Unity3D
مدیر انجمن
مدیر انجمن


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 1034


جمعه 11 فروردين 1391 - 00:27
پاسخ بصورت نقل قول
سلام

برای ذخیره اطلاعات باید بیشتر توضیح بدی تا بهتر بتونیم توضیح بدیم

یه راه ساده برای خوندن فایل های متنی و باینری اینطور هست :

كد:
            byte[] bytes = File.ReadAllBytes("MyFile.dta");
            string[] lines = File.ReadAllLines("MyTextFile.txt");


اما اگه اطلاعاتی رو داری که میخوای در زمان اجرا ذخیره/بازیابی بکونیش به همون شکل باید کلاست رو Serialize/Deserialize کنی :


كد:
    [Serializable]
    class A : ISerializable
    {

        int intField = 10;
        float floatField = 20f;
        bool boolField = true;

        public A()
        {

        }

        public A(SerializationInfo info, StreamingContext context)
        {
            intField = (int)info.GetValue("f1", typeof (int));
            floatField = (float)info.GetValue("f1", typeof(float));
            boolField = (bool)info.GetValue("f1", typeof(bool));
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("f1", intField);
            info.AddValue("f2", floatField);
            info.AddValue("f3", boolField);
        }

        public void ToFile(string file)
        {
            try
            {
                BinaryFormatter binary = new BinaryFormatter();
                Stream stream = File.OpenWrite(file);
                binary.Serialize(stream, this);

                stream.Close();
                stream.Dispose();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static A FromFile(string file)
        {
            try
           {
                BinaryFormatter binary = new BinaryFormatter();
                Stream stream = File.OpenRead(file);
                A a = binary.Deserialize(stream) as A;

                stream.Close();
                stream.Dispose();

                return a;
           }
           catch (Exception e)
           {
              throw e;
           }
        }
    }


در مورد Interface ها هم که پرسیدی خب نمیدونم توضیح درستی میتونم بهت بدم یا نه ...
اما چون توی زبان C# شما نمیتونی از چندتا کلاس ارث بری کنی ، این مشکل به وسیله Interface ها مرتفع میشه ( یعنی شما میتونی از چند تا interface ارث بری کنی ) ... interface ها میتونن حاوی متدها و رویداد ها و ... باشن ( فقط تعریفشون و نه تشریح ) و اینکار برای دسته بندی کلاس ها مفیده ... یعنی فرض کن شما 4 تا کلاس دارید که قایلیت رندر شدن دارن ( حالا به اشکال متفاوت ) و میخوای متد Render رو برا هر کدوم بنویسی ، حالا شما میای و یه Interface برا این تعریف میکنی به نام IRenderable اون کلاس ها باید از این اینترفیس ارث بری کنن و شما بعدا میتونی توی کدت میتونی تشخیص بدی که آیا این آبجکت قابلیت رندر رو مثلا داره :

كد:

 if (myobject is IRenderable)
        {
        ...
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
Parham
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


جمعه 11 فروردين 1391 - 01:00
پاسخ بصورت نقل قول
ذخیره کردن منظورم اینه که داده ها رو همونطور که گفتم بدون استفاده از کلاس های سی شارپ رمز گذاری می کنم و بعد درون یک فایل باینری قرار میدم.
با الگوریتمی هم که یونیتی گفت بازخوانیش می کنم.
اما فکر کنم اینی که رمز ها رو توی دیتابیس بریزم بهتر باشه.

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
MahanGM
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 3 شنبه 20 شهريور 1386
تعداد ارسالها: 1846
محل سكونت: USS Terra Nova


جمعه 11 فروردين 1391 - 12:40
پاسخ بصورت نقل قول
امین مثال خوبی زد برای ذخیره سازی شیء.

Parham, برای Interface ها یه مثال خوب دارم. فرض کن توی یه شرکت 100 نفر کارمند کار میکنن. هرکدومشون هم نسبت به پستشون یه حقوقی میگیرن. خوب تو میای میگی اینها همه قراره سر برج حقوق بگیرن ولی یکیشون یجور میگیره و یکی دیگه یجور دیگه. Interface ها همین رو میگن، میگن بیا تعریف هات رو توی من بنویس و تشریح هات رو توی جاهایی که از من ارث بری میکنی. و اینکه امین گفت نمیشه از بیشتر از یک کلاس ارث بری کرد و باید از Interface ها استفاده کنی کاملا درسته.

برای توضیح در مورد ذخیره سازی باینری این کد رو ببین:

كد:

/* Write binary data */
using(System.IO.BinaryWriter Writer = new System.IO.BinaryWriter(System.IO.File.Open("filename.dat", FileMode.CreateNew)))
{
  // Write string data
  byte[] stringData = System.Text.Encoding.UTF8.GetBytes("stringData");
  Writer.Write(stringData.Length);
  Writer.Write(stringData, 0, stringData.Length);
}

/* Read binary data */
using(System.IO.BinaryReader Reader = new System.IO.BinaryReader(System.IO.File.Open("filename.dat", FileMode.Open)))
{
  // Read string data
  int stringDataLen = Reader.ReadInt32();
  byte[] stringData = Reader.ReadBytes(stringDataLen);
  string stringData = System.Text.Encoding.UTF8.GetString(stringData);
}


قسمت اول برای نوشتن یه فایل باینری. توی VB6 خیلی آسون بود اینکار ها. من همه اطلاعات رو بصورت رشته ذخیره میکردم ولی وقتی اومدم رو Net. دیدم اینطوری نیست و یجور بهتره. در کل اینجا میتونی متغیر های طبیعی رو مثل int, float, bool و یکسری دیگره رو راحت ذخیره کنی چون خود BinaryWriter متدهاش رو داره ولی برای ذخیره سازی رشته باید اون رو تبدیل کنی به یه آرایه از byte ها. اگر هم میخوای محتویات یه فایل دیگه رو توی یه فایل ذخیره کنی و یا به اصطلاح آرشیو کنی میتونی از دستور زیر استفاده کنی برای گرفتن کل فایل بصورت byte.
كد:

/* Read file data as byte array */
byte[] fileData = System.IO.File.ReadAllBytes("filename");


بعد همین متغیر fileData رو میتونی بصورت مستقیم ذخیره کنی با همون متد Write. راستی من توی کد یجا نوشتم که طول رشته رو ذخیره کنه. همونجا که Length آرایه رو ذخیره کردم. همیشه یادت باشه که هرچیزی می خوای ذخیره کنی اول طولش رو ذخیره کن چون توی خوندن فایل باید بدونی قالب چطوریه و چطوری داده ها رو بخونی. توی VB هم همینطور بود.

امیدوارم بهت کمک کنه.

_________________
I have a dream that little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character. I have a dream today
هیچ راه فراری نیست!
http://www.dreamfactory.ir
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نويسنده
پيغام
Parham
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


جمعه 11 فروردين 1391 - 16:36
پاسخ بصورت نقل قول
از توضیح در باره ی اینتر فیس ها ممنونم، یعنی اگه درست فهمیده باشم ما میایم تو اینترفیس شکل کلی یک متد رو مشخص می کنیم
و بعد در کلاسهای دیگه میریم overloadش میکنیم.
درسته؟
به خاطر فایل ها هم ممنوم ولی وی بی 6.0 بهتر بود! Arrow

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
MahanGM
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 3 شنبه 20 شهريور 1386
تعداد ارسالها: 1846
محل سكونت: USS Terra Nova


جمعه 11 فروردين 1391 - 17:20
پاسخ بصورت نقل قول
Parham, در مورد اینترفیس ها بله دقیقا همینه. برای فایل ها ها هم بنظر من VB6 استاندارد نبود. چون اولا شما می خواستی یه داده خیلی بزرگ رو مثلا بیشتر از حد توان ذخیره متغیر ها رو ذخیره کنی نمی تونستی و overflow میگرفتی. الآن با Net. من یه فایل فیلم که 500 مگ بود رو باینری کردم بدون هیچ مشکلی آرشیوش کرد. در مورد بیشتر از یک گیگ نمی دونم ولی فکر کنم میتونه. خود GC همه کارهارو به عهده میگیره Twisted Evil .

_________________
I have a dream that little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character. I have a dream today
هیچ راه فراری نیست!
http://www.dreamfactory.ir
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نويسنده
پيغام
Parham
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


جمعه 11 فروردين 1391 - 18:29
پاسخ بصورت نقل قول
ماهان جون بیار ممنونم.
مسئله ی دیگه ای که دارم اینه،شما با DLL ها در VB.net کار می کنی؟DLLهایی که خودت درستشون کنی.
من تو C# موفق به این کار شدم ولی در VB.net و c++.net نتونستم.
اگه راهکاری داری برام بنویس که بدجور بهش نیاز دارم.

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
MahanGM
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 3 شنبه 20 شهريور 1386
تعداد ارسالها: 1846
محل سكونت: USS Terra Nova


جمعه 11 فروردين 1391 - 19:20
پاسخ بصورت نقل قول
Parham, دوست عزیز DLL ها برای استفاده ازشون هدفی وجود داره. یکی از هدف هاش اینه که شما یکسری توابع رو داری که می خوای بین چند تا برنامه ات تقسیم کنی و یا کلا یکسری منابع داری مثلا یکسری تصویر یا چیز های دیگه که می خوای تمامی برنامه هات همشون ازش استفاده کنن و اینکه همشون هم از یک نسخه یا ورژن مشترک و بروز ترین استفاده کنن. این یکی از هدف های DLLه. مثلا بازی Solitaire که تو ویندوز XP بود یه DLL داشت به اسم card.dll که بازی های دیگه ای هم که باید از تصویر کارت ها استفاده میکردن میومدن از این DLL یه لینک میگرفتن.

در مورد نوشتن DLL توی Net. کلا با هم فرقی نداره نوشتنشون، چه تو VB چه تو #C. ولی ++C چون باید بیاد روی GC سوار بشه یکم فرق داره. من نمی دونم مشکلت چیه بگو من برات توضیح میدم.

_________________
I have a dream that little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character. I have a dream today
هیچ راه فراری نیست!
http://www.dreamfactory.ir
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نويسنده
پيغام
Parham
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


شنبه 12 فروردين 1391 - 11:08
پاسخ بصورت نقل قول
من توابعم رو تو VB.net تعریف می کنم،بعد توی یک پروژه دیگه با C# اون namespace رو فراخوانی می کنم اما توابع و struct ها رو نشان نمی ده.
توی خود وی بی.net هم با دستور import همون namespace رو فراخوانی می کنم همین مشکل رو داره توی cpp که کلا هیچی.
مثلا یکسری تابع مربوط به login-username &password می نویسم میخوام تو همه ی برنامه هام استفادشون کنم.
اگه این کار رو تو vb.net بکنم نمیشه ولی درC#.net میشه!
---یک مسئله ی دیگه...
در مورد GC یک توضیحی میدید لطفن؟ Question Embarassed

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
MahanGM
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 3 شنبه 20 شهريور 1386
تعداد ارسالها: 1846
محل سكونت: USS Terra Nova


شنبه 12 فروردين 1391 - 13:33
پاسخ بصورت نقل قول
Parham, در مورد نشون دادن اونها خوب حتما سطح دسترسی رو تعیین نکردی. ولی اگه توی خود namespace تعریف کنی قابل دسترسی هست. نمی دونم باید پروژه ات رو ببینم.

GC یا Garbage Collection یه برنامه داخلی خود Net. هست که تقریبا میشه گفت مدیریت حافظه رو به عهده داره. مثلا متغیر هایی که خارج از Scope میشن رو مدیریت میکنه، اشاره گر ها و کلا حافظه رو مدیریت شده کنترل میکنه. این کار توی زبونی مثل ++C انجام نمیشه و خودت باید حافظه رو مدیریت کنی که میگن اینطوری خیلی سریع تر برنامه اجراء میشه. من نمی دونم اینطوری هست یا نه چون اینها توی مقیاس های بزرگ خودشون رو نشون میدن.

_________________
I have a dream that little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character. I have a dream today
هیچ راه فراری نیست!
http://www.dreamfactory.ir
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 2 از 3 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد
برو به صفحه قبلي  1, 2, 3  بعدي


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |