نمایش نتایج 1 تا 3 از 3

نام تاپیک: جلوگیری از پر شدن فایل از کارکتر صفر هنگام قطع برق

  1. #1
    کاربر دائمی آواتار mbshareat
    تاریخ عضویت
    آبان 1387
    محل زندگی
    شهر مقدس قم-چهارمردان-کوچه 37
    پست
    990

    جلوگیری از پر شدن فایل از کارکتر صفر هنگام قطع برق

    سلام علیکم
    من یک برنامه دارم که زود به زود فایلهای کوچک رو ذخیره می کنه.چنین کدی برای ذخیره دارم:
    Procedure TFileBrowserForm.SaveStr(FileName:String;FileStr:S  tring);Var
    Stream : TFileStream;
    Begin
    Stream := TFileStream.Create(FileName,fmCreate);
    TestFileStr(FileName,S);
    try
    Stream.Position := 0;
    Stream.Write(FileStr[1],Length(FileStr));
    finally
    Stream.Free;
    end;
    End;

    وقتی ویندوز قفل می کنه(فرض کنید پاور خرابه یا ویندوز سنگینه یا اشکال نرم افزاری پیش میاد) یا برق میره،
    بارها کاربرها گزارش کرده اند که فایل و حتی بک آپش پر از کارکتر صفر شده اند.(خودم هم درگیرش شده ام)
    واقعا نمی دونم ویندوز چه کار به بک آپ فایلها داره.
    در کد بالا TestFileStr(FileName,S) وجود کارکتر صفر رو بررسی می کنه و مانع ذخیره فایل با کارکتر صفر میشه.
    چند سوال دارم که ممکنه برای درک/حل مشکل کمک کنه(به ترتیب اهمیت میگم):
    1)این سوال خیلی مهم به نظر نمیرسه..آیا Try..finally..end ممکنه موجب تاخیر ذخیره فایل بشه؟مثلا وقتی از پروسیجر خارج بشیم، هنوز فایل ذخیره نشده باشه؟
    2)آیا ویندوز هم مثل برنامه ADM اندروید ، اول فایل با طول مشخص فاقد اطلاعات نهایی میسازه(مثلا پر از کارکتر صفر) بعد اطلاعات میریزه در فایل؟
    3) من دو روش بدون استفاده از استریم دارم که میتونم جایگزین کنم. به نظرتون کمک می کنه؟
    procedure TMainForm.SaveStr2(FileName:String;S:String);
    Var
    F:File;
    begin
    AssignFile(F,FileName);
    ReWrite(F,1);
    Seek(F,0);
    BlockWrite(F,Pointer(S)^,Length(S));
    CloseFile(F);
    end;
    procedure TMainForm.SaveStr3(FileName:String;S:String);
    var
    hFile : Integer;
    begin
    hFile := FileOpen(FileName, fmOpenReadWrite or fmShareDenyWrite);
    if hFile > 0 then
    try
    if FileSeek(hFile,0,2) < 0 then
    RaiseLastOSError;
    if FileWrite(hFile, S[1],Length(S) * SizeOf(Char)) <= 0 then
    RaiseLastOSError;
    finally
    FileClose(hFile);
    end;
    end;

    سوال آخر برام مهمه. این برنامه دو سال هست که مشکل کارکتر صفر داره.چند جا بک آپ می گیرم و گاهی همه فایلها خراب میشند.
    من فعلا برنامه رو تغییر دادم و از SaveStr2 استفاده می کنم.
    اما اگر کسی میتونه کمک کنه خوبه.معمولا فایل پر از کارکتر صفر هست اما گاهی وسط فایل کارکتر صفر هست که به نظر میرسه مشکل از برنامه ام بوده. بهم گفتند کاربرها زیاد با قطعی برق مواجه میشند و می دونم که خیلیهاشون سیستم قدیمی دارند.

  2. #2

    نقل قول: جلوگیری از پر شدن فایل از کارکتر صفر هنگام قطع برق

    مشکلاتی که در مورد خرابی فایل ها با آن مواجه هستید، به ویژه وجود کاراکترهای پوچ، می تواند از عوامل مختلفی ناشی شود:
    ساختار try..finally تضمین می کند که منابع آزاد می شوند، اما ذاتا باعث تاخیر در نوشتن فایل نمی شود. با این حال، اگر سیستم تحت بار سنگین باشد یا وقفه هایی (مانند قطع برق) وجود داشته باشد، ممکن است فایل قبل از خروج برنامه به طور کامل نوشته نشود.
    ویندوز معمولاً قبل از نوشتن داده، فایلی پر از کاراکترهای خالی ایجاد نمی کند و داده ها را مستقیماً در فایل می نویسد. با این حال، اگر یک عملیات نوشتن قطع شود، می تواند منجر به ذخیره ناقص اطلاعات شود.
    روش‌های جایگزین شما (SaveStr2 و SaveStr3) ممکن است کنترل بیشتری بر روی نوشتن فایل فراهم کنند. استفاده از BlockWrite یا FileWrite می‌تواند کارآمدتر باشد و ممکن است به کاهش مشکلات مربوط به خرابی فایل‌ها کمک کند، به خصوص اگر استثناها را با ظرافت بیشتری مدیریت کنید.
    برای محافظت بیشتر در برابر از دست دادن داده ها، پیاده سازی یک مکانیسم مدیریت خطا و احتمالاً استفاده از رویکرد فایل موقت را در نظر بگیرید که در آن ابتدا روی یک فایل موقت می نویسید و پس از تکمیل موفقیت آمیز، آن را به نام فایل نهایی تغییر نام می دهید. به این ترتیب می توانید از خراب شدن فایل اصلی در هنگام وقفه های غیرمنتظره جلوگیری کنید.

  3. #3
    کاربر دائمی آواتار mbshareat
    تاریخ عضویت
    آبان 1387
    محل زندگی
    شهر مقدس قم-چهارمردان-کوچه 37
    پست
    990

    نقل قول: جلوگیری از پر شدن فایل از کارکتر صفر هنگام قطع برق

    ممنون
    روش من این هست که وقتی فایل رو بعد از بررسی فقدان کارکتر صفر می نویسم یک کپی با پسوند دیگه ازش می گیرم. اما وقتی ویندوز قفل می کنه یا مشکلات دیگه بارها دیده شده که هم فایل اصلی و هم فایل پشتیبان با پسوند دیگه خراب و از کارکتر اول فایل تا آخرین کارکتر، کارکتر صفر شده اند.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •