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

نام تاپیک: اضافه كردن متن به ابتداي يك فايل

  1. #1

    اضافه كردن متن به ابتداي يك فايل

    سلام
    من قبلا (تو دلفي 7) براي اضافه كردن يك متن به يك ابتداي فايل از كد زير استفاده مي‌كردم:


    procedure AddTextToFile(Str, Source, Destination : String);
    var
    stream : TMemoryStream;
    s : array[1..2] of String;
    i, size : Integer;
    begin
    SetLength(s[1],length(str));
    for i:=1 to length(Str) do s[1][i]:=str[i];

    stream:=TMemoryStream.Create;
    try
    stream.LoadFromFile(Source);
    SetLength(s[2],stream.size);
    stream.Read(s[2][1],stream.Size);
    finally
    stream.Free;
    end;
    stream:=TMemoryStream.Create;
    try
    size:=length(s[1]);
    stream.Write(size,sizeof(size));
    stream.Write(s[1][1],size);

    size:=length(s[2]);
    stream.Write(size,sizeof(size));
    stream.Write(s[2][1],size);

    stream.SaveToFile(Destination);
    finally
    stream.Free;
    end;
    end;



    براي حذف كردنش هم از اين كد استفاده ميكردم:

    procedure RemoveTextFromFile(var Str:String; Source, Destination : String);
    var
    s : String;
    InFileStream : TFileStream;
    OutFileStream: TFileStream;
    size : Integer;
    begin
    InFileStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyNone);
    try
    InFileStream.Read(size, SizeOf(size));
    SetLength(s, size);
    InFileStream.Read(s[1], size);
    Str:=s;
    // Could decrypt the strings here if desired
    InFileStream.Read(size, SizeOf(size));
    SetLength(s, size);
    InFileStream.Read(s[1], size);
    if Destination <> '' then
    begin
    // Write new file
    OutFileStream := TFileStream.Create(Destination,fmCreate or fmOpenWrite or fmShareExclusive);
    try
    OutFileStream.Write(s[1], size)
    finally
    OutFileStream.Free
    end;
    end;
    finally
    InFileStream.Free
    end;
    end;


    ولي الان تو دلفي 2010 جواب نميده! يعني رشته‌اي متفاوت با آن چيزي كه قبلا ابتداي فايل نوشته شده بود برمي‌گردونه.
    كسي ميتونه راهنمايي كنه كه اشكالش چيه؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: اضافه كردن متن به ابتداي يك فايل

    كسي ميتونه راهنمايي كنه كه اشكالش چيه؟
    علتش این هست که دلفی 2010 از یونیکد استفاده میکنه که داده در ان دو بایت طول داره در صورتی که قبلا از حالت کد اسکی استفاده کردید که یک بایت طول داشت.

  3. #3

    نقل قول: اضافه كردن متن به ابتداي يك فايل

    علتش این هست که دلفی 2010 از یونیکد استفاده میکنه که داده در ان دو بایت طول داره در صورتی که قبلا از حالت کد اسکی استفاده کردید که یک بایت طول داشت.
    توجه داشته باشید که در یونیکد همیشه یک کاراکتر دو بایت طول ندارد. یونیکد انواع مختلفی دارد که طول کاراکتر در آنها متفاوت است. برخی از این نوع ها به همراه طول آنها در زیر آمده است:

    utf-8 که در آن هر کاراکتر 2 تا 4 بایت طول دارد
    utf-16 که در آن هر کاراکتر 2 بایت طول دارد
    utf-32 که در آن هر کاراکتر 4 بایت طول دارد

    یک نکته دیگر: به طور پیش فرض دلفی 2010 و XE از utf-16 استفاده می کنند ولی در نظر داشته باشید که در نسخه های آینده دلفی ممکن است اینگونه نباشد. فکر می کنم که اینرا آقای Seppy Bloom از گروه توسعه دهنده دلفی فرموده بودند، البته زیاد مطمئن نیستم!
    آخرین ویرایش به وسیله BORHAN TEC : پنج شنبه 01 اردیبهشت 1390 در 15:22 عصر دلیل: اشتباهاً به جای utf-16 نوشته بودم utf-8

  4. #4
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: اضافه كردن متن به ابتداي يك فايل

    نقل قول نوشته شده توسط شاهین عشایری مشاهده تاپیک
    توجه داشته باشید که در یونیکد همیشه یک کاراکتر دو بایت طول ندارد. یونیکد انواع مختلفی دارد که طول کاراکتر در آنها متفاوت است. برخی از این نوع ها به همراه طول آنها در زیر آمده است:

    utf-8 که در آن هر کاراکتر 2 تا 4 بایت طول دارد
    utf-16 که در آن هر کاراکتر 2 بایت طول دارد
    utf-32 که در آن هر کاراکتر 4 بایت طول دارد

    یک نکته دیگر: به طور پیش فرض دلفی 2010 و XE از utf-8 استفاده می کنند ولی در نظر داشته باشید که در نسخه های آینده دلفی ممکن است اینگونه نباشد. فکر می کنم که اینرا آقای Seppy Bloom از گروه توسعه دهنده دلفی فرموده بودند، البته زیاد مطمئن نیستم!
    منظور ما هم دلیل این اختلاف در بازیابی داده بود.

  5. #5

    نقل قول: اضافه كردن متن به ابتداي يك فايل

    خوب حالا چه جوري بهش بگم از همان يك كاراكتر استفاده كنه!؟

  6. #6

    نقل قول: اضافه كردن متن به ابتداي يك فايل

    utf-8 که در آن هر کاراکتر 2 تا 4 بایت طول دارد
    طول کارکتر در UTF-8 بین 1 تا 4 بایت هست.

    خوب حالا چه جوري بهش بگم از همان يك كاراكتر استفاده كنه!؟
    استفاده از RawByteString به جای String و PAnsiChar به جای PChar، و AnsiChar به جای Char.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7

    نقل قول: اضافه كردن متن به ابتداي يك فايل

    طول کارکتر در UTF-8 بین 1 تا 4 بایت هست.
    برای حصول اطمینان دوباره به یک مقاله معتبر مراجعه کردم. در پست قبل من تعداد بایت ها را اشتباه نوشته بودم. شکل درست آنها به شکل زیر است:

    utf-8 که در آن هر کاراکتر 1 تا 4 بایت طول دارد
    utf-16 که در آن هر کاراکتر 2 و یا 4 بایت طول دارد
    utf-32 که در آن هر کاراکتر 4 بایت طول دارد

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

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