عند التحقق من أن ملف MP3 هو التحقق من سلسلة اسم الملف مع .endswith جيدة بما فيه الكفاية؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أقوم بفعل هذا:

    private void LoadSoundFile()
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if (openFileDialog1.FileName.EndsWith(".mp3"))
            {
                txtFileName.Text = openFileDialog1.FileName;
            }
            else
            {
                MessageBox.Show("Currently Musicality only supports MP3 files.", "Unsupported file chosen.");                        
            }
        }

    }

هل هناك طريقة أفضل لفحص أنواع الملفات أو أفعل ذلك بالطريقة الصحيحة؟

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

المحلول

وجود ملحق .mp3 لا يعني أنه mp3، ولكن ليس لديك مؤشر (مقبول) أنه ليس كذلك.

في مرحلة ما، ستدعو بعض API إلى تشغيل الملف، وسوف تفشل. عندما يفعل ذلك، أنت تعرف أنه ليس ملف قابل للعب. لذا تأكد من التعامل مع ذلك مع بعض UI لائق أيضا.

نصائح أخرى

يبدو أن سؤالك يسأل عما إذا كانت الطريقة الصحيحة للتحقق مما إذا كان الملف MP3 هو البحث في نهاية اسم الملف. كما قال آخرون، الإجابة على ذلك لا. يمكن لمسة Matt Warren's Post مساعدتك إذا كنت ترغب في النظر في الملف لمعرفة ما إذا كان بتنسيق MP3 في الواقع.

لكن تعليقك على إجابة Eran Betzalel تجعلني أتساءل عما إذا كنت تسأل عموما ما إذا كانت الطريقة الصحيحة للتحقق من ملحق الملف هو استخدام String.endSwith ().

شيء واحد يجب ملاحظته هو أن EndSwith (سلسلة) حساسة لحالة الأحرف، وبالتالي فإن نتائج:

EndsWith("mp3")
EndsWith("Mp3")
EndsWith("MP3")

و

EndsWith("mP3")

لا تعطي جميعها نفس الإجابة. اختبار أفضل:

if (Path.GetExtension(openFileDialog1.FileName).ToLower() == "mp3")

إذا كان كل ما تهتم به هو ملحق الملف وليس محتويات الملفات.

إذا كنت ترغب بالفعل في تحليل الملف (للتحقق مما إذا كان الأمر صحيحا بالفعل، فستحتاج إلى إلقاء نظرة على المواصفات حتى تقوم بتحليلها بشكل صحيح. هنا هو مكان جيد للبدء وهناك بعض المعلومات هنا. هذه المقالة في CodeProject يذهب إلى أبعد من ذلك واستخراج علامات ID3 وكذلك الرأس.

سيكون هذا أفضل من مجرد التحقق من أن التمديد هو ".mp3"، لكنه الكثير من العمل الإضافي لذلك يجب أن يكون من المفيد.

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

لا، لأن ملحق الملف هو ببساطة مؤشر، فهذا ليس دليلا موثوقا بهذا الملف أو يحتوي على.

يمكنني تسمية ملف الموسيقى I mysong.zzz. وسوف تظل تلعب في برنامج Winamp. عند تحميله، يجب عليك تذكير ببدء الملف لمعرفة ما إذا كان حقا MP3.

يمكنك أيضا تعيين عامل تصفية في مربع حوار "الملف المفتوح" بحيث يسمح للمستخدم فقط بتحديد ملفات MP3:

openFileDialog1.Filter = "mp3|*.mp3|All Files|*.*";

أعتقد أن الطريقة المناسبة للتحقق في الواقع ما إذا كان ذلك ملف MP3 (يتطلب ذلك أن يتم فتح الملف) هو البحث عن "الأرقام السحرية"، وتسلسلات البايتات داخل البيانات الثنائية التي تحدث دائما. في هذه الحالة، يمكنك استخدام الرقم السحري للعلامة ID3: يتم تخزين علامات ID3V1 في آخر 128 بايت من الملف بدءا من البايتات "علامة" (سداسي عشري "544147")، في حين يتم تخزين علامات ID3V2 في بداية الملف ، وبالتالي فإن أول 3 بايت من الملف هي "ID3" (سداسي عشري "494433"). لا أعرف إذا كانت إطارات MP3 أنفسهم أرقام سحرية بسيطة مثل هذا. من الواضح أن هذه الطريقة تتطلب فتح الملف، مما قد يؤدي إلى فحص عدد كبير من الملفات أبطأ.

إذا كنت تريد أن تكون متأكدا، قم بتحميل الملف بهذا http://sourceforge.net/projects/id3dotnet/ سوف تفشل باستثناء إن لم يكن mp3. ما عليك سوى إنشاء ID3.NET.MP3File مع اسم الملف أو الدفق في المنشئ معرفة ما إذا كان يلقي استثناء

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