কোনও ফাইলের নাম স্ট্রিং থেকে ফাইল এক্সটেনশন সরান


201

যদি আমার একটি স্ট্রিং কথা "abc.txt"থাকে তবে একটি সরস্ট্রিংটি পাওয়ার জন্য কি দ্রুত উপায় আছে যা সঠিক "abc"?

fileName.IndexOf('.')ফাইলের নাম "abc.123.txt"বা কিছু হতে পারে বলে আমি একটি করতে পারি না এবং আমি স্পষ্টতই কেবল এক্সটেনশনটি (যেমন "abc.123") থেকে মুক্তি পেতে চাই ।

উত্তর:


372

Path.GetFileNameWithoutExtensionপদ্ধতি ফাইলের নাম আপনি এক্সটেনশানটি ছাড়া একটি আর্গুমেন্ট হিসাবে পাস, যেমন নাম থেকে সুস্পষ্ট হওয়া উচিত দেয়।


1
যা পরামর্শ দিচ্ছিল: স্ট্রিং.ফর্ম্যাট ("{0} \\ {1}", পাথ.গেটডাইরেক্টরিনেম (পাথ), পাথ.গেটফাইলনেম উইথআউট এক্সটেনশন (পাথ)) ... তবে আমি নীচে এর চেয়ে আরও ভাল সংস্করণ দেখেছি। String.Format!
এমেরি.নোয়েল

4
পথ সংরক্ষণ করা কোনও কাঙ্ক্ষিত প্রভাব নয়, নোট করুন যে পদ্ধতির নামটি GetFileNameWithoutExistance। যদি পথ সংরক্ষণের প্রতিশ্রুতি দেওয়া হত, তবে পদ্ধতির নামটি আলাদা হওয়া উচিত ছিল। পদ্ধতির বিবরণটিও বেশ সুনির্দিষ্ট, কেবলমাত্র কোনও এক্সটেনশন ছাড়াই ফাইলের নাম ফিরে আসে। ওপি নির্দিষ্ট করে দেয় না যে তার জন্য পথ প্রয়োজন। পুরোপুরি বিপরীত.
মর্টেন

@ প্রশ্নউইনের এই প্রশ্নটির সাথে পথটির কোনও সম্পর্ক নেই। এটি কেবল ফাইলের নাম থেকে এক্সটেনশন সরানোর জন্য বলে ।
ররি ম্যাকক্রসন

248

এই উদ্দেশ্যে ফ্রেমওয়ার্কে একটি পদ্ধতি রয়েছে, এটি এক্সটেনশন বাদে পুরো পথ রাখবে।

System.IO.Path.ChangeExtension(path, null);

যদি কেবল ফাইলের নাম প্রয়োজন হয় তবে ব্যবহার করুন

System.IO.Path.GetFileNameWithoutExtension(path);

37
এটা সঠিক উত্তর. গৃহীত উত্তরের ফাইলগুলি স্ট্রিপ করে
লেবু

8
এটি পথ সংরক্ষণ করে রাখার সাথে সাথে এটি আরও ভাল উত্তর
জেমস এইচ

8
এখানে nullএকটি যাদু মান আছে। আপনি যদি String.Emptyওরফে ব্যবহার করেন তবে আপনাকে ""পিছনের [ .] বিন্দু দিয়ে রেখে দেওয়া হবে ।
THBBFT

আমি এই উত্তর ভাল হয় দ্বিমত। GetFileNameWithoutExtensionআরও স্পষ্ট হয়। যদিও এটির সম্ভাব্য অনাকাঙ্খিত পার্শ্ব প্রতিক্রিয়া এবং এড়াতে বিকল্পের অস্তিত্ব সম্পর্কে জেনে এটি দুর্দান্ত।
জেরোমেজ

57

তুমি ব্যবহার করতে পার

string extension = System.IO.Path.GetExtension(filename);

এবং তারপরে নিজেই এক্সটেনশনটি সরিয়ে ফেলুন:

string result = filename.Substring(0, filename.Length - extension.Length);

@ বায়ো, আসলে এটি এক্সটেনশনের দৈর্ঘ্য এবং তারপরে এক্সটেনশন হওয়া পর্যন্ত ফাইলের নামটি ধরে ফেলবে।
নেভিল

আপনি যদি System.IO.Path কার্যকারিতা অগ্রাহ্য করার সিদ্ধান্ত নেন তবে আপনি এক্সটেনশনটি যেমন পান: স্ট্রিং এক্সটেনশন = ফাইলনাম ubসুস্ট্রিং (ফাইলের নাম। LastIndexOf ('।')); ?
কিউমাস্টার

27

স্ট্রিং.লাস্ট ইন্ডেক্সএফ কাজ করবে।

string fileName= "abc.123.txt";
int fileExtPos = fileName.LastIndexOf(".");
if (fileExtPos >= 0 )
 fileName= fileName.Substring(0, fileExtPos);

10
কোনও এক্সটেনশন ছাড়াই ফাইলগুলি সন্ধান করুন, পছন্দ করুন foo/bar.cat/cheese!
ক্যামেরন

String.LastIndexOfএই জাতীয় কিছু অর্জনের জন্য বিপজ্জনক। উপরে কোনও এক্সটেনশনবিহীন ফাইলগুলির জন্য, যেমন @ ক্যামেরন উপরে বলেছে, আপনার ফলাফলগুলি আপনি চান তা নাও হতে পারে। এটি করার নিরাপদতম উপায়টি হল উপরের @ লগম্যানের উত্তরটি
শিব

13

আপনি যদি এক্সটেনশন ছাড়াই পুরো পথ তৈরি করতে চান তবে আপনি এরকম কিছু করতে পারেন:

Path.Combine( Path.GetDirectoryName(fullPath), Path.GetFileNameWithoutExtension(fullPath))

তবে আমি এটি করার সহজ উপায় খুঁজছি। কারও কি কোন ধারণা আছে?


8

আমি নীচে, কম কোড ব্যবহার করেছি

string fileName = "C:\file.docx";
MessageBox.Show(Path.Combine(Path.GetDirectoryName(fileName),Path.GetFileNameWithoutExtension(fileName)));

আউটপুট হবে

সি: \ ফাইল


2
এবং যদি আমার ডিরেক্টরি বিভাজক '/';) হয়?
লগম্যান

4
Path.Combine()উল্লেখ না করে ব্যবহার করুন "\\"
ব্রুটস ওয়েম্ব

1

আপনি যদি স্ট্রিং অপারেশনটি ব্যবহার করতে চান তবে আপনি সর্বশেষে ইনডেক্সঅফ () ব্যবহার করতে পারেন যা কোনও অক্ষর বা স্ট্রিংয়ের সর্বশেষ ইভেন্টের জন্য অনুসন্ধান করে। জাভাতে অসংখ্য স্ট্রিং ফাংশন রয়েছে।


1

আপনি সম্ভবত ইউডাব্লুপি এপিআই জিজ্ঞাসা করছেন না। তবে ইউডাব্লুপি-তে, file.DisplayNameকোনও এক্সটেনশন ছাড়াই নাম। অন্যের জন্য দরকারী আশা করি।


0

আমি জানি এটি একটি পুরানো প্রশ্ন এবং Path.GetFileNameWithoutExtensionএটি একটি ভাল এবং সম্ভবত ক্লিনার বিকল্প। তবে ব্যক্তিগতভাবে আমি আমার প্রকল্পে এই দুটি পদ্ধতি যুক্ত করেছি এবং সেগুলি ভাগ করতে চেয়েছিলাম। রেঞ্জ এবং সূচকগুলি ব্যবহার করার কারণে এটির জন্য সি # 8.0 প্রয়োজন।

public static string RemoveExtension(this string file) => ReplaceExtension(file, null);

public static string ReplaceExtension(this string file, string extension)
{
    var split = file.Split('.');

    if (string.IsNullOrEmpty(extension))
        return string.Join(".", split[..^1]);

    split[^1] = extension;

    return string.Join(".", split);
}

-1
    /// <summary>
    /// Get the extension from the given filename
    /// </summary>
    /// <param name="fileName">the given filename ie:abc.123.txt</param>
    /// <returns>the extension ie:txt</returns>
    public static string GetFileExtension(this string fileName)
    {
        string ext = string.Empty;
        int fileExtPos = fileName.LastIndexOf(".", StringComparison.Ordinal);
        if (fileExtPos >= 0)
            ext = fileName.Substring(fileExtPos, fileName.Length - fileExtPos);

        return ext;
    }

2
এটি প্রশ্নের উত্তর দেয় না।
Rapptz

1
আপনি কেন এটির জন্য একটি এক্সটেনশন পদ্ধতি লিখবেন? এই খুব নির্দিষ্ট কেসটি বাদ দিয়ে স্ট্রিং.গেটফাইলে এক্সটেনশন () কোনও কিছুই বোঝায় না। যাইহোক, ফাংশনটি সর্বত্রই বাহিত হয় এবং এটি কোনও স্ট্রিংয়ের সাথে সম্পর্কিত আচরণকে বোঝায়। কোন ঘটনা না।

-3
        private void btnfilebrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            //dlg.ShowDialog();
            dlg.Filter = "CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                string fileName;
                fileName = dlg.FileName;
                string filecopy;
                filecopy = dlg.FileName;
                filecopy = Path.GetFileName(filecopy);
                string strFilename;
                strFilename = filecopy;
                 strFilename = strFilename.Substring(0, strFilename.LastIndexOf('.'));
                //fileName = Path.GetFileName(fileName);             

                txtfilepath.Text = strFilename;

                string filedest = System.IO.Path.GetFullPath(".\\Excels_Read\\'"+txtfilepath.Text+"'.csv");
               // filedest = "C:\\Users\\adm\\Documents\\Visual Studio 2010\\Projects\\ConvertFile\\ConvertFile\\Excels_Read";
                FileInfo file = new FileInfo(fileName);
                file.CopyTo(filedest);
             // File.Copy(fileName, filedest,true);
                MessageBox.Show("Import Done!!!");
            }
        }

দয়া করে কেবল কোড পোস্ট করবেন না, কোড সহ আপনার উত্তরটি ব্যাখ্যা করতে এটি অনেক বেশি সহায়ক।
সুপারবায়াসডম্যান

1
কোডের বড় অংশ সম্পূর্ণ অপ্রাসঙ্গিক। ব্যাখ্যা অনুপস্থিত। এটি দরকারী নয়।
প্লেকে

কোডটি প্রশ্নের মধ্যে পৃথক কোনও সমস্যার সাথে খুব নির্দিষ্ট।
ডমিনিক বেট

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