कैसे सी # का उपयोग कर एक निर्देशिका के भीतर केवल फ़ाइल नाम प्राप्त करने के लिए?


80

जब मैं नीचे के रूप में कोड की लाइन का उपयोग करता हूं, तो मुझे एक स्ट्रिंग सरणी मिलती है जिसमें व्यक्तिगत फ़ाइलों का पूरा पथ होता है।

private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf");

मैं जानना चाहूंगा कि क्या पूरे रास्तों के बजाय तार में केवल फ़ाइल नामों को पुनर्प्राप्त करने का एक तरीका है।

जवाबों:


160

आप Path.GetFileNameपूर्ण पथ से फ़ाइल नाम प्राप्त करने के लिए उपयोग कर सकते हैं

private string[] pdfFiles = Directory.GetFiles("C:\\Documents", "*.pdf")
                                     .Select(Path.GetFileName)
                                     .ToArray();

संपादित करें: ऊपर दिए गए समाधान LINQ का उपयोग करता है , इसलिए इसे कम से कम .NET 3.5 की आवश्यकता होती है। यहाँ एक समाधान है जो पहले के संस्करणों पर काम करता है:

private string[] pdfFiles = GetFileNames("C:\\Documents", "*.pdf");

private static string[] GetFileNames(string path, string filter)
{
    string[] files = Directory.GetFiles(path, filter);
    for(int i = 0; i < files.Length; i++)
        files[i] = Path.GetFileName(files[i]);
    return files;
}

हाय थॉमस, मुझे इस तरह की त्रुटि मिलती है 'System.Array' में 'Select' के लिए परिभाषा नहीं है और कोई एक्सटेंशन विधि नहीं है 'Select' प्रकार का पहला तर्क स्वीकार करते हुए 'System.Array' पाया जा सकता है (क्या आप एक प्रयोग को याद कर रहे हैं? निर्देश या एक विधानसभा संदर्भ?) क्या कुछ और है जिस पर मुझे विचार करने की आवश्यकता है?
— HelloWorld_Always

using System.Linq;फ़ाइल की शुरुआत में जोड़ें , और System.Coreविधानसभा का एक संदर्भ यदि यह पहले से ही नहीं है। इसे .NET 3.5 या उच्चतर की आवश्यकता है, मैं .NET 2.0 के लिए एक समाधान पोस्ट करूंगा यदि आपको इसकी आवश्यकता है
— थॉमस लेवेस्क

9

आप फ़ाइल का नाम प्राप्त करने के लिए विधि Path.GetFileName(yourFileName); (MSDN) का उपयोग कर सकते हैं ।


प्रश्न वस्तुओं के संग्रह के बारे में है, न कि एकल स्ट्रिंग मूल्य उपचार।
— तिगरान

7

आप DirectoryInfo और FileInfo कक्षाओं का उपयोग कर सकते हैं।

//GetFiles on DirectoryInfo returns a FileInfo object.
var pdfFiles = new DirectoryInfo("C:\\Documents").GetFiles("*.pdf");

//FileInfo has a Name property that only contains the filename part.
var firstPdfFilename = pdfFiles[0].Name;

2
string[] fileEntries = Directory.GetFiles(directoryPath);

foreach (var file_name in fileEntries){
    string fileName = file_name.Substring(directoryPath.Length + 1);
    Console.WriteLine(fileName);
}

3
क्या आप अपने उत्तर की व्याख्या प्रदान कर सकते हैं? क्या आप बता सकते हैं कि आपका समाधान थॉमस लेवेस्क के 8-वर्षीय उत्तर से कैसे अलग है? और, विशेष रूप से, क्या आप समझा सकते हैं कि आप फ़ंक्शन Substringका उपयोग करने के बजाय इसका उपयोग क्यों करते हैं Path, जो संभावित रूप से अधिक मजबूत तरीके से करेगा?
— व्येक

1

बहुत सारे तरीके हैं :)

पहला तरीका:

string[] folders = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
string jsonString = JsonConvert.SerializeObject(folders);

दूसरा तरीका:

string[] folders = new DirectoryInfo(yourPath).GetDirectories().Select(d => d.Name).ToArray();

तीसरा तरीका:

string[] folders = 
    new DirectoryInfo(yourPath).GetDirectories().Select(delegate(DirectoryInfo di)
    {
        return di.Name;
    }).ToArray();

0
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GetNameOfFiles
{
    public class Program
    {
        static void Main(string[] args)
        {
           string[] fileArray = Directory.GetFiles(@"YOUR PATH");
           for (int i = 0; i < fileArray.Length; i++)
           {

               Console.WriteLine(fileArray[i]);
           }
            Console.ReadLine();
        }
    }
}

0

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

Directory.EnumerateFiles(LoanFolder).Select(file => Path.GetFileName(file));

नोट: EnumeratesFiles Directory.GetFiles की तुलना में अधिक कुशल है क्योंकि आप पूरे संग्रह के वापस आने से पहले नामों के संग्रह की गणना शुरू कर सकते हैं।

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