# Native Code > برنامه نویسی در Delphi > برنامه نویسی موبایل در Delphi >  روش باز کردن و خواندن یک فایل txt از sd card برای چندین بار

## arman.m.80

من توی یک برنامه نیاز پیدا کردم که از یک فایل txt که روی sd card  قرار دارد یک عدد رو بخونم (پشت سر هم) کلا کار برنامه همینه که یک عدد رو که روی مموری هستش بخونم و آن را نمایش بدهم ولی مشکل اینجاست که اون عدد هر ثانیه عوض میشود ولی توی دلفی وقتی فایلو میخونم دفعه ی بعد که میخونم همون مقدار قبلیو بهم نمایش میده و عدد جدید داخل فایلو نمایش نمیده. :متفکر: 
لطفا راهنمایی کنید من میخوام اون عدد را پست سر هم بخونم ولی عدد واقعی درون فایلو بخونه. :ناراحت: 
با تشکر.

----------


## ابوالفضل عباسی

سلام
شما کد خواندن فایل txt رو اینجا بگذار ببینم دستورت درست هست یانه؟!
بهتره برای خوندن، اون رو وارد stream بریزی و یا اگر درون memo میگذاری،اول memo رو خالی کنی بعد بخونی باروش loadfromfile
در تایمر این فرمان ها اجرا بشه.

----------


## arman.m.80

من با memo این کارو انجام میدم ولی بعد از پاک کردن نوشته memo دوباره بعد از loadfromfile همون مقدار قبلیو بهم نشون میده و مقدار جدید نمیاید.
توی تامر هم گذاشتم ولی باز هم جواب نداد.
روش stream چجوریه؟ من با اون کار نکردم.

----------


## ابوالفضل عباسی

مطمئن هستی مقدار txt موردنظر تغییر پیدا کرده؟
چون وقتی مقدار txt تغییر پیدا میکنه باید مقدار تغییر پیداکرده txt رونشون بده.
روش stream هم در همین بخش جستوجو کنی هست.

----------


## arman.m.80

برای بار اول مقدار درستو نمایش میده اما بعد از اون دیگه مقدار درستو نمایش نمیده و مقدار اول رو نشون میده.
روش stream هم گشتم ولی پیدا نکردم.

----------


## ابوالفضل عباسی

بفرمایید این هم کد کامل ذخیره و بازیابی رشته String به stream:
فقط ادرس فایل تکست رو میدهی تا اون رو به stream تبدیل کنه و بعد stream رو بخون(ولی عجیبه که memo تغییر نمیکنه،قبل از استفاده از stream یک بار memo رو خالی کن و destroy هم بکن و دوباره پرکن.اگر درست عمل نکرد از stream استفاده کن.)
procedure SaveData(FileName: TFileName);var
 MemStr: TMemoryStream;
 Title: String;
begin
 MemStr:= TMemoryStream.Create;
try
 MemStr.Seek(0, soFromBeginning);
 WriteStreamStr( MemStr, TItle );
 MemStr.SaveToFile(FileName);
finally
 MemStr.Free;
end;
end;


procedure LoadData(FileName: TFileName);
var
 MemStr: TMemoryStream;
 Title: String;
begin
 MemStr:= TMemoryStream.Create;
 try
  MemStr.LoadFromFile(FileName);
  MemStr.Seek(0, soFromBeginning);
  Title := ReadStreamStr( MemStr );
 finally
   MemStr.Free;
  end;
end;
  
procedure WriteStreamInt(Stream : TStream; Num : integer);
 {writes an integer to the stream}
begin
 Stream.WriteBuffer(Num, SizeOf(Integer));
end;


procedure WriteStreamStr(Stream : TStream; Str : string);
 {writes a string to the stream}
var
 StrLen : integer;
begin
 {get length of string}
 StrLen := Length(Str);
 {write length of string}
 WriteStreamInt(Stream, StrLen);
 if StrLen > 0 then
 {write characters}
 Stream.Write(Str[1], StrLen);
end;


function ReadStreamInt(Stream : TStream) : integer;
 {returns an integer from stream}
begin
 Stream.ReadBuffer(Result, SizeOf(Integer));
end;


function ReadStreamStr(Stream : TStream) : string;
 {returns a string from the stream}
var
 LenStr : integer;
begin
 Result := '';
 {get length of string}
 LenStr := ReadStreamInt(Stream);
 {set string to get memory}
 SetLength(Result, LenStr);
 {read characters}
 Stream.Read(Result[1], LenStr);
end;

----------


## ali guard

memo  را  Memo1.Refresh; بكنيد

----------


## ابوالفضل عباسی

دوست عزیز این عمل وقتی که برای پرکردن دستور load رو در تایمر میدهی.خودش memo را رفرش میکند.
ولی امتحانش ضرری نداره،ولی با روش stream درست کار میکنه.

----------


## arman.m.80

ممنون من باروش stream تست کردم درست کار کرد و مشکلم حل شد.
با تشکر. :لبخند:

----------


## ابوالفضل عباسی

خواهش میکنم
روش stream موقعی که توی تایمر اجرا میشه،باعث کندی برنامه و گوشی نمیشه دوست عزیز؟

----------


## arman.m.80

کاملا درسته توی کار برنامه وقفه ایجاد میکنه و کلا سرعت برنامه یک سوم میشه ولی با توجه به این که کار اصلی برنامه همینه و برنامه برای کسی نوشته شده و قابل ارایه به عموم نیست و فقط هم در کل برنامه 2 عدد  Button   وجود دارد و در کل به جز این که هر 5 میلی ثانیه یک فایلو میخونه و هر 1 ثانیه یک فایلو مینویسه دیگه کار خاصی انجام نمیده.
با تشکر. :لبخند:

----------


## ابوالفضل عباسی

خواهش میکنم ولی سعی کن از stream استفاده نکنی تا سرعت افت نکنه

----------

