এক্সটেনশন ছাড়াই ফাইলের নাম পাওয়া


279

নির্দিষ্ট ফোল্ডারে ফাইলের নাম পাওয়ার সময়:

DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
foreach (FileInfo fi in smFiles)
{
    builder.Append(fi.Name);
    builder.Append(", ");
    ...
}

fi.Nameআমাকে দেয় তার এক্সটেনশানের ফাইল নাম: file1.txt, file2.txt, file3.txt

এক্সটেনশন ছাড়াই আমি কীভাবে ফাইলের নাম পেতে পারি? ( file1, file2, file3)

উত্তর:


479

আপনি ব্যবহার করতে পারেন Path.GetFileNameWithoutExtension:

foreach (FileInfo fi in smFiles)
{
    builder.Append(Path.GetFileNameWithoutExtension(fi.Name));
    builder.Append(", ");
}

যদিও আমি অবাক হয়েছি এ থেকে সরাসরি পাওয়ার কোনও উপায় নেই FileInfo(বা কমপক্ষে আমি এটি দেখতে পাচ্ছি না)।


7
এবং এক্সটেনশনটি পেতে (উদাহরণস্বরূপ পরে যুক্ত করতে) ব্যবহার করুন: পাথ.গেট এক্সটেনশন (ফাইলের নাম);
জাস্টিন

2
@ জুজজ যদি আপনি একটি খালি স্ট্রিং নিয়ে কাজ করছেন তবে এটি আপনার পক্ষে সহজ তবে আপনার যদি ইতিমধ্যে কোনও ফাইলআইনফো অবজেক্ট থাকে তবে পাথ নিয়ে বিরক্ত করার দরকার নেই। ফাইলআইনফো ইতিমধ্যে উদ্দেশ্যে "এক্সটেনশন" সম্পত্তি সরবরাহ করে।
jmbpiano

আমি ত্রুটি পেয়েছি "" নির্মাতা "বর্তমান প্রসঙ্গে নেই"। আমি 'system.Text' যুক্ত করেছি তবে তবুও একই ত্রুটি পেয়েছি। কারণ কি?
ffttyy

@ ফট্টি ওপির কোডটিতে builderএকটি উদাহরণ হবে StringBuilder। এটি getFileNameWithoutExistance এর উদাহরণ মাত্র - আপনি সম্ভবত নিজের কোডটি কল করে এটি আরও ভাল করে লিখবেন।
রুপ

9
এখানে একটি লক্ষ্য রাখতে হবে যে আপনার ফাইলটিতে যদি ডাবল এক্সটেনশন থাকে তবে GetFileNameWithoutExtensionকেবল শেষের এক্সটেনশনটি সরিয়ে দেওয়া হয় । উদাহরণস্বরূপ, ফাইলের example.es6.jsexample.es6
ডেভিড রবার্টস

48

ব্যবহার Path.GetFileNameWithoutExtension()


নোট করুন যে পাথ.গেটফাইনেম উইথআউট এক্সটেনশনটি সর্বোত্তম উপায় নয় কারণ এটি অবৈধ পাথ চরগুলি পরীক্ষা করে এবং একটি লুপে ডিরেক্টরীসেটরেটরচার, ভলিউমসেপারেটরচর বের করার চেষ্টা করে যা ফাইলের নামের জন্য প্রয়োজনীয় নয় (পুরো পথের নয়)!
এস.স্পার্পোশন

22

এই সমাধানটি একটি পেছনের কমা যোগ করাও প্রতিরোধ করে।

var filenames = String.Join(
                    ", ",
                    Directory.GetFiles(@"c:\", "*.txt")
                       .Select(filename => 
                           Path.GetFileNameWithoutExtension(filename)));

আমি এই দৃশ্যের জন্য ডিরেক্টরীআইএনফো, ফাইলআইএনফো অপছন্দ করি।

ডাইরেক্টরিআইএনফো এবং ফাইলআইএনফো ফোল্ডার এবং ফাইলগুলির প্রয়োজনের তুলনায় আরও ডেটা সংগ্রহ করে যাতে তারা প্রয়োজনের চেয়ে বেশি সময় এবং মেমোরি নেয়।


2
+1 টি। আমি যে কোনও দিনের Directory.GetFilesচেয়ে বেশি পছন্দ করি DirectoryInfo.GetFiles, যদি আমি চাই তবে ফাইলের নাম।
যোগেশ

আমি এটি পছন্দ করি কারণ স্ট্রিং.জয়িন, লিনকিউ, কোনও স্ট্রিংবিল্ডার নেই।
সিএসবা তোথ

আপনি যদি সোর্স কোডটি একবার দেখুন। ফাইলআইএনফোর নির্মাতা খুব হালকা ওজন। এবং আপনি যে সমস্ত তথ্য দেখেন তা সম্পত্তির মাধ্যমে সম্পন্ন হয়। আপনি কেবল তাদের কল
করলেই

@ fjch1997 - কনস্ট্রাক্টর পাথ.গেটফাইনেমে কল করে এবং অনুমতিগুলি পরীক্ষা করে। সুতরাং এটি কিছুটা অপ্রয়োজনীয় বলে মনে হচ্ছে।
এর্নো

@ আর্নোডওয়ার্ড ফাইলআইওপারমিশন এসিএলের বিরুদ্ধে অনুমতি চেক করে না। পরিবর্তে এটি আংশিক বিশ্বস্ত কোডের অনুমতি পরীক্ষা করার জন্য .NET- এ এক ধরণের প্রক্রিয়া। সুতরাং, এটির কোনও আসল আইও কল করা উচিত নয়। এটি পারফরম্যান্সকে কতটা প্রভাবিত করে? আমি পরীক্ষা না করে বলতে পারি না। তবে আমি ধরে নিই যে এটি দুর্দান্ত নয়
fjch1997

10

ব্যবহার Path.GetFileNameWithoutExtension। পাথটি সিস্টেম.আইও নেমস্পেসে রয়েছে।


10
Path.GetFileNameWithoutExtension(file);

এটি কেবলমাত্র এক্সটেনশনের ধরণ ছাড়াই ফাইলটির নাম দেয়। আপনি এটি পরিবর্তন করতে পারেন যাতে আপনি নাম এবং ফাইলের ধরণ উভয়ই পান

 Path.GetFileName(FileName);

উত্স: https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx


ধন্যবাদ, সেরা উত্তরটি সর্বদা সংক্ষিপ্ত উত্তর।
আশরাফ আবুসাদা

6

অতিরিক্ত উত্তর হিসাবে (বা বিদ্যমান উত্তরগুলিতে সংশ্লেষ করতে) আপনি ডিরেক্টরি আইএনফো ক্লাসে আপনার জন্য এটি সম্পাদন করতে একটি এক্সটেনশন পদ্ধতি লিখতে পারেন। এখানে একটি নমুনা যা আমি মোটামুটি দ্রুত লিখেছিলাম যা ডিরেক্টরি নাম বা সংশোধন ইত্যাদির জন্য অন্যান্য মানদণ্ড সরবরাহ করতে শোভিত হতে পারে:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace DocumentDistributor.Library
{
    public static class myExtensions
    {
        public static string[] GetFileNamesWithoutFileExtensions(this DirectoryInfo di)
        {
            FileInfo[] fi = di.GetFiles();
            List<string> returnValue = new List<string>();

            for (int i = 0; i < fi.Length; i++)
            {
                returnValue.Add(Path.GetFileNameWithoutExtension(fi[i].FullName)); 
            }

            return returnValue.ToArray<string>();
         }
    }
}

সম্পাদনা: আমি আরও মনে করি যে অ্যারেটি নির্মাণের জন্য লিনকিউ ব্যবহার করা থাকলে এই পদ্ধতিটি সম্ভবত সরল বা দুর্দান্ত হতে পারে but তবে লিনকুতে এই ধরণের নমুনার জন্য এটি পর্যাপ্ত পর্যায়ে করার অভিজ্ঞতা আমার নেই।

2 সম্পাদনা করুন (প্রায় 4 বছর পরে): আমি লিনকুই-আইয়েড পদ্ধতিটি ব্যবহার করব:

public static class myExtensions
{
    public static IEnumerable<string> GetFileNamesWithoutExtensions(this DirectoryInfo di)
    {
        return di.GetFiles()
            .Select(x => Path.GetFileNameWithoutExtension(x.FullName));
    }
}

5

FileInfo এর নিজস্ব সম্প্রসারণ জানে তাই আপনি এটি সরিয়ে ফেলতে পারেন

fileInfo.Name.Replace(fileInfo.Extension, "");
fileInfo.FullName.Replace(fileInfo.Extension, "");

বা যদি আপনি ভৌতিক হয়ে থাকেন যে এটি মাঝখানে উপস্থিত হতে পারে বা মাইক্রোপটিমাইজ করতে চান:

file.Name.Substring(0, file.Name.Length - file.Extension.Length)

4

যদি ফাইলের নামের ডিরেক্টরি থাকে এবং আপনার ডিরেক্টরিটি হারাতে হবে না:

fileName.Remove(fileName.LastIndexOf("."))


1

শুধু মাত্র নথির জন্য:

DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
string fileNames = String.Join(", ", smFiles.Select<FileInfo, string>(fi => Path.GetFileNameWithoutExtension(fi.FullName)));

এই ভাবে আপনি ব্যবহার করবেন না StringBuilderকিন্তু String.Join()। এছাড়াও দয়া করে মন্তব্য করুন যাতে Path.GetFileNameWithoutExtension()একটি পূর্ণ পথ প্রয়োজন ( fi.FullName), fi.Nameঅন্য উত্তরগুলির মধ্যে একটিতে যেমন দেখলাম তা নয় ।


-5
using System;

using System.IO;

public class GetwithoutExtension
{

    public static void Main()
    {
        //D:Dir dhould exists in ur system
        DirectoryInfo dir1 = new DirectoryInfo(@"D:Dir");
        FileInfo [] files = dir1.GetFiles("*xls", SearchOption.AllDirectories);
        foreach (FileInfo f in files)
        {
            string filename = f.Name.ToString();
            filename= filename.Replace(".xls", "");
            Console.WriteLine(filename);
        }
        Console.ReadKey();

    }

}

5
আপনি সচেতন বলে মনে হয় না যে ইতিমধ্যে একটি ফ্রেমওয়ার্ক শ্রেণি রয়েছে যা এটি আপনার জন্য করে।
অ্যান্ড্রু বারবার

3
এছাড়াও, যদি কেউ তাদের ফাইলগুলির নাম "কারেন্ট.এক্সএলএসএফ.এলএসএলস" রাখে তবে এটি রিয়েল সমস্যা তৈরি করতে চলেছে।
টম প্যাডিলা

@ টমপ্যাডিলা কেন এই সমস্যার কারণ হবে?
লুক 101

কারণ এই পদ্ধতিটি ফাইলের নাম হিসাবে "কারেন্ট.ফায়ালস" উপস্থাপন করবে। কারণ ".xls" এর প্রতিটি উদাহরণ নামের মাঝখানে থাকা "" সহ "প্রতিস্থাপন করা হবে।
টম প্যাডিলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.