फ़ाइल नाम स्ट्रिंग से फ़ाइल एक्सटेंशन निकालें


201

यदि मेरे पास एक स्ट्रिंग है "abc.txt", तो क्या विकल्प का विकल्प प्राप्त करने का एक त्वरित तरीका है "abc"?

मैं नहीं कर सकता fileName.IndexOf('.')क्योंकि फ़ाइल का नाम "abc.123.txt"या कुछ और हो सकता है और मैं स्पष्ट रूप से केवल एक्सटेंशन (यानी "abc.123") से छुटकारा चाहता हूं ।

जवाबों:


372

Path.GetFileNameWithoutExtensionविधि आप फ़ाइल नाम आप विस्तार के बिना एक तर्क के रूप पारित, जैसा कि नाम से स्पष्ट होना चाहिए देता है।


1
सुझाव देने वाला था: string.Format ("{0} \\ {1}", Path.GetDirectoryName (पथ), Path.GetFileNameWithoutExtension (पथ) ... लेकिन मैंने इसके बजाय Path.Combine का उपयोग करने के लिए नीचे एक बेहतर संस्करण देखा। String.Format!
एमरी

4
पथ को संरक्षित करना एक वांछित प्रभाव नहीं है, ध्यान दें कि विधि नाम GetFileNameWithoutExtension है। यदि पथ संरक्षण का वादा किया गया था, तो विधि का नाम अलग होना चाहिए था। विधि विवरण भी काफी विशिष्ट है, केवल फ़ाइल नाम के साथ कोई विस्तार नहीं दिया गया है। ओपी निर्दिष्ट नहीं करता है कि उसे पथ की आवश्यकता है। बिल्कुल इसके विपरीत।
मोर्टन बोर्क

इस सवाल पर @dukevin को रास्ते से कोई लेना देना नहीं है। यह केवल फ़ाइल नाम से एक्सटेंशन को हटाने के लिए कहता है ।
रोरी मैक्रों

248

इस उद्देश्य के लिए रूपरेखा में एक विधि है, जो विस्तार को छोड़कर पूरा रास्ता बनाए रखेगी।

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

यदि केवल फ़ाइल नाम की आवश्यकता है, तो उपयोग करें

System.IO.Path.GetFileNameWithoutExtension(path);

37
यह सही जवाब है। स्वीकृत उत्तर स्ट्रिप्स फ़ाइल पथ
नींबू

8
यह एक बेहतर उत्तर है क्योंकि यह पथ को संरक्षित करता है
जेम्स एच

8
nullयहाँ एक जादू महत्व है। यदि आप String.Emptyउर्फ का उपयोग करते हैं तो आपको ""एक अनुगामी [ .] डॉट के साथ छोड़ दिया जाएगा ।
बीवाईबीएफटी

मैं इस जवाब से असहमत हूं बेहतर है। GetFileNameWithoutExtensionअधिक स्पष्ट है। हालांकि इसके संभावित अवांछित दुष्प्रभाव और इससे बचने के लिए एक विकल्प के अस्तित्व के बारे में जानना अच्छा है।
जेरोमज at

57

आप उपयोग कर सकते हैं

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

और फिर मैन्युअल रूप से एक्सटेंशन को हटा दें:

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

@Bio, वास्तव में है कि विस्तार की लंबाई है, और फिर विस्तार तक फ़ाइल नाम पकड़ लेता है।
नेविल

यदि आप System.IO.Path कार्यक्षमता को अनदेखा करने का निर्णय लेते हैं, तो यदि आप एक्सटेंशन प्राप्त करते हैं तो बेहतर नहीं है: स्ट्रिंग एक्सटेंशन = filename.Substring (filename.LastIndexOf ('।')); ?
QMaster

27

String.LastIndexOf काम करेगा।

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

10
बिना एक्सटेंशन वाली फ़ाइलों के लिए देखें foo/bar.cat/cheese!
कैमरन

String.LastIndexOfइस तरह से कुछ पूरा करने के लिए खतरनाक है। बिना एक्सटेंशन वाली फ़ाइलों के लिए, जैसा कि @Cameron ने ऊपर कहा है, आपके परिणाम वही हो सकते हैं जो आप चाहते हैं। ऐसा करने का सबसे सुरक्षित तरीका @ लॉगमैन के उत्तर
शिव

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)));

आउटपुट होगा

C: \ फ़ाइल


2
और क्या होगा यदि मेरी निर्देशिका विभाजक '/';) है?
लोगमैन

4
Path.Combine()निर्दिष्ट करने के बजाय उपयोग करें "\\"
ब्रॉट्स वेम्ब

1

यदि आप स्ट्रिंग ऑपरेशन का उपयोग करना चाहते हैं, तो आप फ़ंक्शन lastIndexOf () का उपयोग कर सकते हैं जो किसी वर्ण की अंतिम घटना या विकल्प के लिए खोज करता है। जावा में कई स्ट्रिंग फ़ंक्शन हैं।


1

आप शायद UWP एपीआई नहीं पूछ रहे हैं। लेकिन UWP में, file.DisplayNameबिना एक्सटेंशन के नाम है। आशा है कि दूसरों के लिए उपयोगी है।


0

मुझे पता है कि यह एक पुराना सवाल है और Path.GetFileNameWithoutExtensionएक बेहतर और शायद क्लीनर विकल्प है। लेकिन व्यक्तिगत रूप से मैंने इस दो तरीकों को अपनी परियोजना में जोड़ा है और उन्हें साझा करना चाहता हूं। पर्वतमाला और सूचकांकों के उपयोग के कारण इसके लिए C # 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
इस सवाल का जवाब नहीं है।
रप्त्ज

1
आप इसके लिए एक्सटेंशन पद्धति क्यों लिखेंगे? इस विशिष्ट मामले के अलावा, String.GetFileExtension () कोई मतलब नहीं रखता है। हालाँकि, फ़ंक्शन को हर जगह ले जाया गया है, और यह किसी भी स्ट्रिंग के लिए विशिष्ट व्यवहार को दर्शाने वाला है। जो मामला न हो।

-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
कोड का बड़ा हिस्सा पूरी तरह से अप्रासंगिक है। स्पष्टीकरण गायब है। यह उपयोगी नहीं है।
पलक

कोड प्रश्न में एक से भिन्न समस्या के लिए बहुत विशिष्ट है।
डोमिनिक बेट्ट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.