PDA

View Full Version : ذخیره memorystream در دلفی



seven_point
جمعه 31 اردیبهشت 1389, 20:16 عصر
سلام دوستان.



procedure TForm1.Button1Click(Sender: TObject);
var
MemOut:TMemoryStream;
fs:TFileStream;
begin
MemOut := TMemoryStream.Create;
try
MemOut.Write('salam',5);
MemOut.Seek(2,soFromBeginning);
MemOut.SaveToFile('1.txt');
finally
MemOut.Free;
end;
end;


این کد قائدتا باید توی فایل کلمه lam رو ذخیره کنه و sa رو حذف کنه ولی کل بافر یعنی کلمه salam رو ذخیره میکنه.چرا؟

seven_point
جمعه 31 اردیبهشت 1389, 20:40 عصر
واقعا کسی نیست اینو بدونه؟
دارم دیونه میشم هرچی بهش فکر میکنم نمیشه.
الان دو سه روز گیر این موضوع هست.

حسین شهریاری
جمعه 31 اردیبهشت 1389, 22:52 عصر
str:=copy('salam',3,2);
MemOut.Write(str);

دستور بالا را نگاه کنید.آیا اینطوری نمیشه مشکل را حل کرد؟

در ضمن برای اینکه مشکل شما حل بشه کافی است جای دستور

MemOut.Write('salam',5);


را با دستتور:


MemOut.Seek(2,soFromBeginning); عوض کنید.

vcldeveloper
شنبه 01 خرداد 1389, 00:44 صبح
این کد قائدتا باید توی فایل کلمه lam رو ذخیره کنه و sa رو حذف کنه ولی کل بافر یعنی کلمه salam رو ذخیره میکنه.چرا؟
قرار نیست متد Seek باعث حذف چیزی بشه، متد Seek فقط اشاره گر Stream رو به محلی که تعیین کرده میبره، و می تونید از اونجا روی Stream خودتون Read یا Write داشته باشید. وقتی Stream رو ذخیره می کنید، کل Stream ذخیره میشه.

seven_point
شنبه 01 خرداد 1389, 03:24 صبح
مرسی آقای شهریاری.
آقای کشاورز متشکرم بابت پاسختون.

آقای کشاورز خوب یعنی راهی نیست که از محل اشاره گر فایل رو ذخیره کرد؟

vcldeveloper
شنبه 01 خرداد 1389, 04:37 صبح
آقای کشاورز خوب یعنی راهی نیست که از محل اشاره گر فایل رو ذخیره کرد؟
از محل اشاره گر Read کنید، و در یک FileStream بریزید.

seven_point
یک شنبه 02 خرداد 1389, 01:53 صبح
مرسی.
ولی این کار باعث میشه برنامه تا مدتی هنگ کنه.دیگه واقعا اعصابم قاطی کرده

vcldeveloper
یک شنبه 02 خرداد 1389, 03:00 صبح
ولی این کار باعث میشه برنامه تا مدتی هنگ کنه.
مگه چی رو دارید در فایل ذخیره می کنید؟!
اگر حجم داده زیاد هست، داده ها را از MemoryStream به صورت قطعه قطعه به FileStream منتقل کنید؛ با استفاده از متدهای Read و Write.

seven_point
یک شنبه 02 خرداد 1389, 14:56 عصر
سلام.
دارم یه عکس با حجم تقریبا 2M رو انتقال میدم.
کلا هر فایلی که انتقال میدم تا زمان اتمام کامل کار برنامه هنگ میکنه و نمیشه جا به جاش کرد.

مصطفی ساتکی
سه شنبه 04 خرداد 1389, 10:20 صبح
فایل 2MG حجم آنچنانی نیست البته بازهم به cpu بستگی داره.تصویر مبدا با LoadFromStream بایستی load بشه که با Thread نوشته نشده.شما اگر بخاید عمل انتقال رو با read و write انجام بدید می تونید بینشون Application.ProcessMessage رو فراخوانی کنید.یا می تونید کل عملیات کپی تونو تو یه thread قرار بدید.کافی تو کلاس thread متد بنویسید و سپس در هنگام ایجاد کلاس این متد رو synchornize کنید .این طوری دیگه هنگ هم نمیشه