PDA

View Full Version : خارج کردن فایل از حافظه



Mask
شنبه 06 تیر 1388, 20:36 عصر
با سلام به همه اساتید
یه برنامه نوشتم که یه ارور میده اگه ممکنه راهنماییم کنید.
من یه ممو دارم که داخل اون دارم تایپ میکنم در همین زمان یه تایمر هم هست که هر 1 میلی ثانیه نوشته های این ممو رو سیو می کنه تو یه فایل. تا اینجا درست.
حالا اگه برم و اون فایل رو باز کنم و همچنان اون ممو داره اطلاعات توش تایپ میشه وقتی فایل رو باز می کنم پیغام can not creet یه همچین چیزی یعنی نمیتونم فایل رو بسازم میده.
باید چیکار کنم.

tdkhakpur
شنبه 06 تیر 1388, 20:41 عصر
سلام
نمیدونم شما داخل پروسه تایمر چکار کردید ولی کارتان را باید به اتمام برسانید و بعد فایل را باز کنید.
ولی اگر پروسه تایمر را ارسال میکردید میتوانستم بیشتر توضیح بدم.

adinochestva
شنبه 06 تیر 1388, 20:42 عصر
خوب وقتی بازش می کنید لاک میشه و برنامتون نمی تونه توش بنویسه

mehdimdp
یک شنبه 07 تیر 1388, 12:04 عصر
همونطور كه آقاي خاكپور گفتن ، بهتره پروسه ي تايمر رو بگيد . تا ببينيم ميشه كاريش كرد يا نه

hamidele
یک شنبه 07 تیر 1388, 19:33 عصر
سلام دوست عزیز
اگه میخواین اطلاعات توی memo تون رو همیشه داشته باشین می تونین این جور کدی رو به کار ببرین:



try
Memo1.Lines.SaveToFile('c:\test.txt');
except
Memo1.Lines.SaveToFile('c:\test.txt.tmp');
end;

البته این فقط نوعی راه حل برای فرار از خطای احتمالی هستش! اما نیتونه بهتون ایده های بهتری هم بده . مثلا این که قبل از باز کردن فایل مورد نظرتون توسط برنامه تون ، چک کنید که این فایل در حال استفاده نباشه!

Mask
جمعه 12 تیر 1388, 17:32 عصر
ممنون از دوستان
مشکلمو فهمیدم
ببینید من یه برنامه دارم به نام project1.exe
این برنامه در حال اجراست و داره یه تایمر در 1 میلی ثانیه هی اطلاعات تو ممو رو سیو می کنه در فایل c:\1.txt حالا اگه دوباره من همین فایل project1.exe رو اجرا کنم قاطی پاتی میشه و برنامه ارور زیر رو میده.

Project1
---------------------------
Cannot create file "c:\1.txt". The process cannot access the file because it is being used by another process.
---------------------------
OK
---------------------------
چرا؟
چون یه برنامه داره تو این فایل مینویسه و دوباره وقتی یه برنامه دیگه می خاد تو این فایل بنویسه ارور میده.
اومدم و از کامپوننت زیر که فقط یه بار اجازه میده یه برنامه باز بشه استفاده کردم اما بازم فایده نداره چون به محض اجرای فایل من تایمر شروع به کار میکنه و تا کامپوننت میاد بفهمه برنامه تکراریه و ببندتش چنتا از ارور های بالا میا .
حالا چیکار کنم؟

Mask
جمعه 12 تیر 1388, 17:37 عصر
کامپوننت یادم رفت!!!

seyed_farid
شنبه 13 تیر 1388, 19:47 عصر
براي يكبار اجرا شدن ازين هم ميتونيد استفاده كنيد:

program A;

uses
Forms,
windows,
DataModule in 'DataModule.pas' {DataModule1: TDataModule}
;

{$R *.RES}
Var
hMutex:THandle;
begin
hMutex:=CreateMutex(nil,false,'A');
if waitforsingleobject(hMutex,0)<>wait_TimeOut then
begin

Application.Initialize;
Application.Title := 'A';
Application.CreateForm(TDataModule1, DataModule1);
Application.Run;

end else Application.MessageBox('A Application already is Running.', 'Information...', mb_iconinformation);
end.

Felony
شنبه 13 تیر 1388, 20:13 عصر
برای این که بفهمید برنامتون یک بار اجرا شده بهترین راه استفاده از Mutex هست که در پست پیش بهش اشاره شده .