PDA

View Full Version : ایجاد فایل پاک نشدنی



Developer Programmer
جمعه 22 اسفند 1382, 20:29 عصر
سلام
حتما دیدین که وقتی یه document رو تو برنامه word باز کنین... یه فایل مخفی ایجاد میکنه و از اون بمنظور نسخه پشتیبان استفاده میکنه که البته این فایل رو نمیشه حذف کرد
حالا من به مشکلی برخوردم که باید تا زمانی که برنامه من داره اجرا میشه کاربر نتونه فایل پشتیبان رو حذف کنه
کسی راهی میتونه پیشنهاد کنه ؟

baabi
جمعه 22 اسفند 1382, 22:05 عصر
البته من حدس میزنم که چون اون فایل در حال استفاده توسط برنامه است قابل پاک شدن نیست

said ali
یک شنبه 24 اسفند 1382, 11:40 صبح
با سلام
دقیقا" منم همین فکر رو دارم ولی در مورد عکس نمیشه چون کلش یه دفعه تو برنامه لود میشه و همچنین فایلهایی که با این صورت هستند اما صدا که تیکه تیکه لود میشه هیچ وقت نمیشود هنگام پخش ان اون رو حذف کرد. پس یه کار کن که اون فایل تیکه تیکه لود بشه. در این صورت حذف نمیشه.البته فکر کنم اینجوری باشه.

moradi_am
یک شنبه 24 اسفند 1382, 14:05 عصر
اگر فایل باز بمونه امکان حذف نخواهد بود پس سعی کنید فایل را با دستوراتی مثل fileopen و ... بازکنید و موقع خروج از برنامه ببندید .البته حتما ببندید چون باز بماند مشکل ایجاد میشود .

Developer Programmer
یک شنبه 24 اسفند 1382, 15:29 عصر
:!:

Developer Programmer
یک شنبه 24 اسفند 1382, 15:34 عصر
ولی در مورد عکس نمیشه چون کلش یه دفعه تو برنامه لود میشه و همچنین فایلهایی که با این صورت هستند اما صدا که تیکه تیکه لود میشه هیچ وقت نمیشود هنگام پخش ان اون رو حذف کرد. پس یه کار کن که اون فایل تیکه تیکه لود بشه. در این صورت حذف نمیشه.البته فکر کنم اینجوری باشه.

عزیز بابا فقط میخوام برای یه چند لحظه ای فایل حذف نشه ضمنا در صورت امکان(این قسمت خیلی مهمه) واسه چند لحظه کپی نشه

Kambiz
جمعه 29 اسفند 1382, 11:56 صبح
همون طور که دوستان گفتند٬ در زمانی که نمی‌خوای فایل توسط برنامه دیگه‌ای قابل دسترسی باشه٬ فایل رو بصورت زیر باز کن:

var
FileStream: TStream;

FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareExclusive);
try

. . .

finally
FileStream.Free;
end;

میتی دات نت
پنج شنبه 19 شهریور 1383, 18:16 عصر
به نام خدا :

جواب Kambiz از همه بهتر و علمی تره . من که از این راه انجام می دهم :idea:

persianboy
پنج شنبه 26 شهریور 1383, 07:51 صبح
به نام ایران و ایرانی :
یه function هست که به جز جلوگیری از delete کردن ، اجازه اجرا کردن هم
نمیده ، شاید به دردت خورد !

در var اصلی برنامه می نویسیم :


var protectedfile:hfile;

حال کافیست از function زیر استفاده کنیم :


function ProtectFile(sFilename : string) : hFile;
var
hf: hFile;
lwHFileSize, lwFilesize: longword;
ofs : TOFStruct;
begin
if FileExists(sFilename) then
begin
hf := OpenFile(pchar(sFilename), ofs, OF_READ or OF_WRITE or OF_SHARE_EXCLUSIVE);
if hf <> 0 then
begin
lwFilesize := GetFileSize(hf, @lwHFileSize);
if LockFile(hf, 0, 0, lwFilesize, lwHFilesize) then
Result := hf else Result := 0;
end
else Result := 0;
end
else Result := 0;
end;

function UnProtectFile(hf: hFile): boolean;
begin
if hf <> 0 then
CloseHandle(hf);
end;
یک مثال :

procedure TForm1.Button1Click(Sender: TObject);
begin
protectedFile := ProtectFile(ExtractFilePath(Application.Exename)+' test.txt');
if protectedFile = 0 then
MessageBox(Handle, 'Error locking file!', '', MB_OK or MB_ICONERROR) else
Button1.Enabled := False;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
plik: TextFile;
data: string;
begin
UnProtectFile(protectedFile);

AssignFile(plik, 'test.txt');
Reset(plik);
Read(plik, data);
CloseFile(plik);

protectedFile := ProtectFile(ExtractFilePath(Application.Exename)+' test.txt');
ShowMessage(data);
end;