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

نام تاپیک: خراب شدن فایل با قطع برق

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

    خراب شدن فایل با قطع برق

    سلام خدمت دوستان
    یه مدت هست یه مشکل جدی در فایلهایی که از یک برنامه تایپ استفاده می کنند پیش میاد.
    معمولا هنگام قطع برق پیش میاد اما گزارش شده که در حال کار عادی هم پیش اومده.
    برنامه با فشار هر کلید فاصله و همچنین بعضی کارهای دیگه هم فایل رو ذخیره می کنه و هم پشتیبان میگیره.
    مشکلی که پیش میاد این هست که گاهی کل فایل با کارکتر صفر پر میشه و دیده شده که انتهای فایل خراب میشه. مثلا چند روز پیش یه لحظه برق کم و زیاد شد، یه فایل 25 کیلو بایتی شد 31 بایت(در انتهای هر فایل کارکتر & وجود داره و در قسمتی از برنامه کارکترهای انتهای فایل بعد از اون رو که فاصله یا انتهای سطر باشند(عملا غیر مفید)، خودکار حذف می کنم).
    نمی دونم چرا محتوای فایل تغییر می کنه. شاید بتونم هر پنج دقیقه یک فایل موقت درست کنم(مثل کاری که مایکروسافت ورد می کنه) اما مطمئن نیستم که آیا تایمر در عمل برنامه اخلال ایجاد می کنه یا نه ولی در هر صورت مشکل اینطوری حل نمیشه.
    خیلی پیش شخصی به من گفت چرا وقتی برنامه دیگری روی مجموعه از فایلها کار کرده ولی هنوز برنامه رو نبسته ایم، فایلها قفل هستند.(چون خیلی پیش بود یادم نمیاد میخواست با برنامه فایل باز کنه یا حذف کنه یا چه کاری بود)
    می ترسم فایل اخیری که برنامه روش کار می کنه به نحوی هنوز بسته نشده باشه و باقطع برق، محتواش خراب بشه.چون فقط فایل جاری خراب میشد.
    من با چنین کدی فایل رو ذخیره می کنم:
        If MakeBackup=True then
    BackUp(CurFileName);
    AssignFile(F,CurFileName);
    ReWrite(F,1);
    Seek(F,0);
    BlockWrite(F,Pointer(FileStr)^,Length(FileStr));
    CloseFile(F);


    نمی دونم تغییر نحوه ذخیره اطلاعات متن فایل کمکی می کنه؟ آیا بهتره از فایل استریم یا FileOpen استفاده کنم یا نه؟
    آخرین ویرایش به وسیله mbshareat : سه شنبه 06 دی 1401 در 18:59 عصر

  2. #2

    نقل قول: خراب شدن فایل با قطع برق

    سلام.
    از فایل استریم استفاده کن
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

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

    نقل قول: خراب شدن فایل با قطع برق

    ممنون. این روش که استفاده کردم، فایل رو از حافظه خارج نمی کنه و مثل بعضی وقتها که نمی شه پوشه رو حذف کرد و نیاز به ریست یا برنامه خاص هست، فایل یه جایی در حافظه گیره؟
    جدیدا متجه شدن که رشته میتونه با صفر شروع بشه و در فایل هم درست ذخیره بشه؛ اما اگر از TStringList برای باز کردن استفاده کنیم به مشکل بر می خوریم.فکر می کنم انتسابش به عنوان متن لیست باکس هم همین مشکل رو ایجاد می کنه و گویا رشته خالی بهش دادیم.
    من دو روش برای ذخیره امتحان کردم که هیچکدوم مانع بازکردن و ویرایش فایل با برنامه دیگه و یا مانع جابجایی فایل به پوشه دیگه در حال باز بون برنامه نشدند(به روش اول باز کردن فایل گیر ندید.فایلی که باز می کنم فایل داس هست و انتهای سطر #13#10 نداره):
    procedure LoadStr(FileName:String;var S:String);
    var
    St:TStrings;
    begin
    St:=TStringList.Create;
    St.LoadFromFile(FileName);
    S:=Copy(St.Text,1,Length(St.Text)-2);
    St.free;
    end;
    procedure SaveStr(FileName,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 LoadStr2(FileName:String;Var S:String);
    Var
    Stream : TFileStream;
    begin
    Stream := TFileStream.Create(FileName,fmOpenRead);
    try
    Stream.Position := 0;
    SetLength(S,Stream.Size);
    Stream.Read(S[1], Stream.Size);
    finally
    Stream.Free;
    end;
    End;
    Procedure SaveStr2(FileName:String;S:String);
    Var
    Stream : TFileStream;
    Begin
    Stream := TFileStream.Create(FileName,fmCreate);
    try
    Stream.Position := 0;
    Stream.Write(S[1],Length(S));
    finally
    Stream.Free;
    end;
    End;
    procedure TForm1.FormCreate(Sender: TObject);
    Var
    S:String;
    begin
    LoadStr('C:\A.txt',S);
    SaveStr('C:\b.txt',S);
    end;



    دیدم در قسمتی از کد از StringList برای لود فایل استفاده کرده ام که تا بسته شدن برنامه آزاد نمیشه. میتونم کد رو تغییر بدم اما اتفاقی که نا امید کننده هست این هست که چند روز پیش حتی فایل پشتیبان که با CopyFile قبل از ذخیره فایل بدست میاد هم ناکار شده بود.
    آخرین ویرایش به وسیله mbshareat : پنج شنبه 08 دی 1401 در 08:28 صبح

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

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