مشاكل D2009 مع مجموعة من شار - كيف يمكنني `elegantly` إصلاح قانون بلدي؟
-
03-07-2019 - |
سؤال
ويمر بعض مشاريعي دلفي القديمة والارتقاء بها إلى D2009، وأجد هذا الإصدار تحسنا كبيرا (Generics.Collections - نجاح باهر.!)) لجميع الإصدارات السابقة، واجهت مشاكل مختلفة. هذا واحد تمكنت من حل لكن الحل لا يبدو نصف أنيقة كما كنت أعتقد أنه يمكن أن يكون. (لاحظ، أنا لم كتابة التعليمات البرمجية دلفي لمدة ثلاث سنوات حتى الآن وحتى ذلك الحين ظهر كان القرصنة الهواة بدلا من فهم متعمق لما يحدث).
ورمز بلادي سيكون له TFileStream وقراءة منه. كانت مكتوبة الملفات التي سبق لي كبار السن التطبيق دلفي بطريقة الأحرف الثلاثة الأولى في الملف سيكون الظهور على التعرف على نوع الملف صالح. ان القارئ يقرأ في البايتات الثلاثة الأولى إلى مجموعة من حرف (وهنا تكمن المشكلة، الآن بعد أن sizeof (شار) و2 بايت) ومن ثم علاج هذه المجموعة كسلسلة لمعرفة ما اذا كان يقرأ "الظهور".
var ...
buffer: array[0..2] of char;
begin
...
InStream.read(buffer, 3);
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end;
...
وهذا سوف تجميع وكان عليه أن يعمل ولكن الآن العازلة هو عمليا 6 بايت، وبالتالي لا يساوي "CTR '<م> من أي وقت مضى م>.
وأنا ثابت بذلك عن طريق تغيير عازلة لarray[0..2] of byte
وأنا قدمت بعض المتغيرات المحلية أكثر للقيام بما يلي:
for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009
if s<>'CTR'...
وذلك أساسا أنتقل البايتات الفردية إلى سلسلة ثم قم بما مقارنة، ولكن يجب أن تكون هناك طريقة أكثر وضوحا للقيام بذلك. يمكنك الرجاء إلقاء بعض الضوء على هذه القضية؟
المحلول
ويمكنك تعيين عازلة ل
var
buffer: array[0..2] of AnsiChar;
وأنت تقرأ في نفس الشيء بالضبط كما كان من قبل.