PDA

View Full Version : باز کردن فایل متنی(txt.) با برنامه خودمان



asghar2008
یک شنبه 17 دی 1391, 01:14 صبح
سلام

چطور میتوان یک فایل متنی رو با برنامه خودمان باز کرد؟

توضیح:

فرض کنید روی فرم ، یک TextBox میگذاریم وپروژه رو Build میکنیم . و فایل setup درست کرده ودر ویندوز نصب میکنیم.

حالا میخوام وقتی فایل متنی رو با برنامه خودم باز کردم(Open With) متن اون نمایش داده بشه.یعنی در داخل TextBox دیده بشه.

ممنون

the king
یک شنبه 17 دی 1391, 01:28 صبح
سلام

چطور میتوان یک فایل متنی رو با برنامه خودمان باز کرد؟

توضیح:

فرض کنید روی فرم ، یک TextBox میگذاریم وپروژه رو Build میکنیم . و فایل setup درست کرده ودر ویندوز نصب میکنیم.

حالا میخوام وقتی فایل متنی رو با برنامه خودم باز کردم(Open With) متن اون نمایش داده بشه.یعنی در داخل TextBox دیده بشه.

ممنون

private void Form1_Load(object sender, EventArgs e)
{
if (Environment.GetCommandLineArgs().Length > 1)
{
string path = Environment.GetCommandLineArgs()[1].Replace("\"","");
textBox1.Text = System.IO.File.ReadAllText(path);
}
}

asghar2008
یک شنبه 17 دی 1391, 01:39 صبح
private void Form1_Load(object sender, EventArgs e)
{
if (Environment.GetCommandLineArgs().Length > 1)
{
string path = Environment.GetCommandLineArgs()[1].Replace("\"","");
textBox1.Text = System.IO.File.ReadAllText(path);
}
}


ممنون دوست عزیز
درست شد.

میشه این خط رو توضیح بدین .مرسی

Environment.GetCommandLineArgs().Length > 1

the king
یک شنبه 17 دی 1391, 01:47 صبح
ممنون دوست عزیز
درست شد.

میشه این خط رو توضیح بدین .مرسی

Environment.GetCommandLineArgs().Length > 1

اگه اسم فایل اجرایی برنامه شما test.exe باشه، ()Environment.GetCommandLineArgs آرایه ای یه که لیست تمامی پارامتر هایی که به برنامه ارسال شده نشون میده،
اما اولین پارامتر همیشه اسم فایل اجرایی یه، یعنی پارامتر اول همیشه text.exe است و تعداد پارامتر ها هیچوقت صفر نیست. به همین جهت ابتدا چک می کنیم که آیا
کاربر پارامتر دیگری (که اسم و مسیر فایل txt است) رو به برنامه ارسال کرده یا خیر. اگر تعداد پارامتر ها 1 باشه، چیزی جز اسم برنامه خودمان نداریم و کاربر مسیر فایلی
رو به برنامه ما ارسال نکرده. اگر ارسال می کرد تعداد پارامتر ها 2 می شد.

asghar2008
یک شنبه 17 دی 1391, 23:44 عصر
سلام

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

میخوام یه فایل متنی که توسط Notpad ویندوز ایجاد شده و داخل آن نوشته فارسی است توسط برنامه خودم باز کنم.

اینم کدی است که فایل متنی رو باز میکنه :
System.IO.StreamReader strread = new System.IO.StreamReader(ofd.FileName, System.Text.Encoding.UTF8);
matn = strread.ReadToEnd;
strread.Close();
textmatn.Text = matn;

ولی وقتی فایل txt. رو باز میکنم. نوشته های فارسی به صورت علامت سوال در میان.البته حروف انگلیسی درست نشون داده میشن.

the king
دوشنبه 18 دی 1391, 03:16 صبح
سلام

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

میخوام یه فایل متنی که توسط Notpad ویندوز ایجاد شده و داخل آن نوشته فارسی است توسط برنامه خودم باز کنم.

اینم کدی است که فایل متنی رو باز میکنه :
System.IO.StreamReader strread = new System.IO.StreamReader(ofd.FileName, System.Text.Encoding.UTF8);
matn = strread.ReadToEnd;
strread.Close();
textmatn.Text = matn;

ولی وقتی فایل txt. رو باز میکنم. نوشته های فارسی به صورت علامت سوال در میان.البته حروف انگلیسی درست نشون داده میشن.

دو مورد هست، اول اینکه شما از کجا مطمئن هستید که فایل ofd.FileName حتما با فرمت UTF8 ذخیره شده، شاید Unicode ئه 16 بیتی باشه،
شاید ANSI باشه. معمولا (System.IO.File.ReadAllText(path این مشکلات رو نداره، سیستم رو خودکار تشخیص میده و کد اش هم که کوتاه تره.
ثانیا فونت و Charset بکار رفته در اون textmatn رو هم بررسی کنید، همه فونت ها جدول کاراکتر هاشون به یک اندازه کامل نیست.

asghar2008
دوشنبه 18 دی 1391, 10:00 صبح
دو مورد هست، اول اینکه شما از کجا مطمئن هستید که فایل ofd.FileName حتما با فرمت UTF8 ذخیره شده، شاید Unicode ئه 16 بیتی باشه،
شاید ANSI باشه. معمولا (System.IO.File.ReadAllText(path این مشکلات رو نداره، سیستم رو خودکار تشخیص میده و کد اش هم که کوتاه تره.
ثانیا فونت و Charset بکار رفته در اون textmatn رو هم بررسی کنید، همه فونت ها جدول کاراکتر هاشون به یک اندازه کامل نیست.

من اولش از این دستور (System.IO.File.ReadAllText(path استفاده کردم ولی متاسفانه متون فارسی رو به صورت علامت سوال نشون میداد به همین دلیل قسمت Encode رو اضافه کردم.فونت استفاده شده tahoma و charset هم روی Normal ست کردم.

با چه کدی میتون فرمت ذحیره شده(UTF8 ,ANSI,Unicode) فایل رو برسی کرد؟

the king
دوشنبه 18 دی 1391, 22:25 عصر
من اولش از این دستور (System.IO.File.ReadAllText(path استفاده کردم ولی متاسفانه متون فارسی رو به صورت علامت سوال نشون میداد به همین دلیل قسمت Encode رو اضافه کردم.فونت استفاده شده tahoma و charset هم روی Normal ست کردم.

با چه کدی میتون فرمت ذحیره شده(UTF8 ,ANSI,Unicode) فایل رو برسی کرد؟

اگر فرمت رو صریحا مشخص نکنید خود روتین ها اینکار رو بصورت خودکار انجام می دهند، چند بایت ابتدای فایل باید چک بشه،
بهش Byte order mark می گویند، خیلی از ویرایشگر های متنی مثل Notepad این کد رو به ابتدای فایل اضافه می کنند،
اما ممکنه نویسنده فایل نرم افزاری باشه که درج این Byte order mark رو در نظر نگرفته باشه.

اگر سه بایت ابتدای فایل 0xEF,0xBB,0xBF بود اون فایل UTF-8 است و اون سه بایت ابتدایی جزئی از متن نیست.
اگر دو بایت ابتدایی فایل 0xFF,0xFE بود، اون فایل Unicode است و اون دو بایت ابتدایی جزئی از متن نیست.
اگه هیچکدوم نبود فایل ANSI ساده است.

رجوع شود به :
Byte order mark (http://en.wikipedia.org/wiki/Byte_order_mark)