عند تمرير اسم ملف إلى طريقة، يجب أن أستخدم fileinfo أو اسم ملف عادي؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

حسنا، العنوان يقول كل شيء. عند تمرير اسم ملف إلى طريقة، يجب أن أستخدم كائن fileinfo أو اسم ملف عادي (سلسلة)؟ لماذا أفضل واحد للآخر؟

بعض زملائي يحبون كتابة طريقة مثل هذا:

  • تصدير الفراغ (fileinfo fileinfo)

هل هو أفضل من:

  • تصدير الفراغ (اسم الشريط)

شكرا!

هل كانت مفيدة؟

المحلول

سأكون عادة مجرد استخدام string - إنه أبسط في معظم الحالات. وإلا فمن المحتمل أن تخلق فقط FileInfo من السلسلة في المقام الأول.

إذا كنت تقوم بإنشاء الطريقة، فيمكنك دائما توفير الحمل الزائد للسماح لكل من.

بالطبع، إذا كنت تعرف أنه حيث كنت تنوي أن نسميها، فأنت عادة يملك أ FileInfo بدلا من string, هذه مسألة مختلفة.

أستطيع أن أرى وجهة نظر زملاؤك - في بعض النواحي FileInfo هي طريقة "نظافة" للتعبير عن المعلمة. أظن string هو النهج أكثر واقعية على الرغم من :)

نصائح أخرى

عادة ما سأمرسل السلسلة. ومع ذلك، يمكنك زيادة التحميل على الطريقة لجعل الجميع سعداء.

الفرق هو في المقام الأول أن هناك القليل من الفحص يحدث؛ يقوم منشئ FileINFo بفحص بعض معامل غير صالح بوضوح أو بوضوح. هناك بعض الأشياء الأخرى التي تقوم بها؛ أخذ fileinfo أساسا فقط يضع Onus معالجة الاستثناءات من منشئ FileINfo على رمز الاتصال، بدلا من التعليمات البرمجية الخاصة بك.

إليك مرجع MSDN منشئ FileINfo الذي يوضح ما يمكن أن يرمي المنشئ:

http://msdn.microsoft.com/en-us/library/system.io.fileinfo.fileinfo.aspx.

أود أن أقول ذلك يعتمد :) العديد من عمليات الملفات الثابتة في ملف الفصل تسمح بعدد من الأشياء مع اسم الملف. إن تجريد الملف ليس مفيدا في كثير من الأحيان في .NET Framework، لذلك أنا متحيز نحو استخدام سلسلة وتدل على اسم الوسيطة ما هو عليه.

إذا كنت تعمل على التعليمات البرمجية التي تنطوي على هؤلاء الزملاء، فسأي استخدام fileinfo. لا يهم حقا الكثير ولكن كتابة الرمز الطريقة التي يتوقعها الآخرون أنه يقلل من الصيانة، ويثير الاتساق، ويجعل الناس سعداء بشكل عام.

سأشير إلى أنني أكره فكرة استخدام FileInfo من أجل وضع إشراء الشيكات مقابل الصلاحية على وظيفة الدعوة، كما هو مدبب بواسطة mcwafflestix. إذا فواصل شيء ما بين وظيفة الاتصال والدولة التي تم استدعاؤها، فلن يتم القبض عليه. لن يتم القبض بالضرورة إذا كنت تستخدم سلسلة ... ولكن على الأقل، فمن الواضح أنه يمكن أن تحدث المشكلة. وسوف ترغب في الاحتفاظ بهذه الاستثناءات في الأسلوب المسمى على أي حال. بالتأكيد لن تفتح الملف وبدء القراءة / الكتابة حتى تكون في الوظيفة الفعلية (إذا كنت، FileINFO وسلسلة ربما تكون الخيار الخاطئ، ولكن الدفق منطقي، كما يوحي Thesean).

يقوم fileinfo بذل المزيد من الجهد لإظهار نية نوع البيانات من سلسلة. وهذا هو دائما شيء جيد تقريبا. ومع ذلك، هناك بالتأكيد الكثير من الأستروم لتمرير اسم ملف كسلسلة، بما في ذلك معظم الإطار .NET Framework نفسه. اسم الملف هو سلسلة. من المفترض أنه من المفترض أن تستخدم المتصل كائن FileINfo لإجبار رمز الاتصال على التحقق من صحة اسم الملف (أي التعامل مع الاستثناء) بدلا من أن يرفع نفسك باستثناء الاستثناء.

بالتأكيد، بما في ذلك طريقة التحميل الزائد سوف يزيل كل الشك، طالما كنت التحقق من صحة اسم الملف الذي يتم تمريره فيه.

أعتقد أن اسم الملف سوف يكفي إذا كان يفعل الشيء نفسه.

  1. سلسلة ليست مسار. لذلك سلسلة ليست أفضل طريقة لتمثيل المسار.
  2. FileINFo ليس أيضا مسارا، وهو تمثل ملف دلاليا.

لذلك سيكون هذا أفضل إذا ستقدم MS كائن المسار :) أو يمكنك أن تجعله بنفسك، خاصة إذا كان هذا الرمز الداخلي الخاص بك. وبهذه الطريقة، لن تحتاج إلى التحقق من حجج المسار في كل مرة ستعمل فيها معهم. غالبا ما يكون لدي العديد من الهياكل التي تمثل نبينات مختلفة، غير مرتبطة، odstring (غير حساس لحالة الأحرف)، وأعتقد أن هذا يجعل الرمز ببساطة.

أود أن اتبع اتفاقية استخدام البخار. هذه هي الطريقة التي أرى أن معظم I / O أجريت. فمن المنطقي بالنسبة لي:

void Export(string s) 
{ 
  Stream fs = new FileStream(s); //think this is correct
  Export(fs); 
}
void Export(Stream s) 
{
  s.Write ( ... );
  ...
}

أوافق، لم يكن FileINFO مفيدا لي. عصا مع السلسلة أو استخدام الدفق الذي يمكن أن يكون filetream، memoryStream، إلخ.

كالعادة، هذا يعتمد. في كل ذلك، لكن أبسط الحالات، أود أن أقول أن استخدام fileinfo يمنحك الكثير من الفوائد دون السلبيات تقريبا. سيقول Docma الصارم OO أن معلومات حول ملف (المسار، تاريخ الإنشاء، التاريخ المعدل، إلخ) يجب أن تكون مضغوطة داخل فئة مثل fileinfo. هذا سيسمح لك بمزيد من المرونة إذا كنت بحاجة إلى سلوك أكثر تعقيدا. إذا كتبت التعليمات البرمجية الخاصة بك ضد fileinfo، فسيكون ذلك دائما أكثر نظافة وأقل عرضة للعلة إذا كنت بحاجة إلى إجراء تغييرات.

إذا لم تتمكن من التفكير على الإطلاق في سيناريو حيث كنت بحاجة إلى سلوك أكثر تعقيدا، وسيتم إلقاؤك حقا، والمضي قدما واستخدام سلسلة فقط.

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