مشاكل D2009 مع مجموعة من شار - كيف يمكنني `elegantly` إصلاح قانون بلدي؟

StackOverflow https://stackoverflow.com/questions/822229

سؤال

ويمر بعض مشاريعي دلفي القديمة والارتقاء بها إلى 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;

وأنت تقرأ في نفس الشيء بالضبط كما كان من قبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top