PDA

View Full Version : حرفه ای: خواندن یم فایل متنی ..



javadspy++
چهارشنبه 09 مرداد 1392, 10:18 صبح
سلام دوستان ..

من میخوام یه فایل متنی که دائما در حال تغییر هست رو بخونم ..

منتها مشکل اول اینکه حجم فایل خیلی زیاد هست ودر لحظه اول برنامه هنگ میکنه.
واینکه هر ثانیه این فایل متنی (txt) در حال تغییر میباشد ..

نمیشه در لحظه اول فقط 50 خط آخر فایل رو خوند ؟؟ که این طوری برنامه هم هنگ نکنه

و هم اینکه چون دائما در حال تغییر هست راحتر یشه خوند و اضافش کرد ...

ایمان مدائنی
چهارشنبه 09 مرداد 1392, 11:23 صبح
با کد زیر میتونی هر چندتا خط که خواستی بخونی


using( Stream stream = File.Open(fileName, FileMode.Open) )
{
using( StreamReader reader = new StreamReader(fileStream) )
{
string line = null;
for( int i = 0; i < myLineNumber; ++i )
{
line = reader.ReadLine();
}
}
}

برای اینکه برنامه هنگ نکنه از MultiThread استفاده کن

javadspy++
چهارشنبه 09 مرداد 1392, 11:32 صبح
سلام مرسی ممنون..

ولی اگه بخوام 50 تا خط آخری رو بخونم چی کار کنم ؟؟؟

مثلا از یه خط خاص شروع کنم به خوندن؟؟؟

در واقع مشکلم اینه که اگه حل بشه نیاز به تردینگ هم نیست !!!!

ایمان مدائنی
چهارشنبه 09 مرداد 1392, 11:40 صبح
با دستور زیر تعداد خطوط رو بدست بیار بعد از خر شماره ای که خواستی بخون تا آخر


var file = new StreamReader("file.txt").ReadToEnd(); // big string
var lines = file.Split(new char[] {'\n'}); // big array
var count = lines.Count;

tooraj_azizi_1035
چهارشنبه 09 مرداد 1392, 12:20 عصر
string[] contents = File.ReadAllLines(@"C:\TextFile.txt");

foreach (string item in contents.Skip(contents.Length - 50))
{

}



رویکرد async اما بهتره:

private async void Button_Click(object sender, RoutedEventArgs e)
{
UnicodeEncoding uniencoding = new UnicodeEncoding();
string filename = @"c:\Users\exampleuser\Documents\userinputlog.txt";
byte[] result;

using (FileStream SourceStream = File.Open(filename, FileMode.Open))
{
result = new byte[SourceStream.Length];
await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
}

UserInput.Text = uniencoding.GetString(result);
}

javadspy++
چهارشنبه 09 مرداد 1392, 12:37 عصر
سلام ...

رویکرد async رو میشه بشتر توضیه بدی ؟؟؟

آخه با اون تفاسیری که شد من گفتم این فایل مدام در حال تغییر و حجمش هم خیلی زیاده ..
رویداد اولی خب قابل فهمه .
روبداد دومی نمیدونم کارش چیه اصلا کمکی میکنه با توجه با حرفای که زدم ..؟؟؟

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

tooraj_azizi_1035
چهارشنبه 09 مرداد 1392, 12:43 عصر
async باعث میشه کد شما روی تردی دیگه اجرا بشه و UI قفل نکنه.
await باعث میشه ترد منتظر کامل شدن خوندن داده بشه و بقیه کد پس از اتمام خوندن اجرا بشه و البته همه اینها روی تردی دیگر.
در .NET Framework 4.5 این کلمات کلیدی ساپورت میشن.