subcarpetas ruta obtener nombre manipular extension directorios directorio buscar archivos archivo c# .net

ruta - obtener nombre del archivo openfiledialog c#



Obteniendo nombres de archivos sin extensiones (11)

Al obtener nombres de archivos en una carpeta determinada:

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

fi.Name me da un nombre de archivo con su extensión: file1.txt , file2.txt , file3.txt .

¿Cómo puedo obtener los nombres de los archivos sin las extensiones? ( file1 , file2 , file3 )


Como respuesta adicional (o para componer las respuestas existentes), puede escribir un método de extensión para lograr esto para usted dentro de la clase DirectoryInfo. Aquí hay una muestra que escribí con bastante rapidez que podría ser embellecida para proporcionar nombres de directorio u otros criterios de modificación, etc.

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

Edición: También creo que este método podría ser simplificado o asombroso si usara LINQ para lograr la construcción de la matriz, pero no tengo la experiencia en LINQ para hacerlo lo suficientemente rápido para una muestra de este tipo.

Edición 2 (casi 4 años después): Aquí está el método LINQ-ified que usaría:

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


Esta solución también evita la adición de una coma al final.

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

No me gusta el DirectoryInfo, FileInfo para este escenario.

DirectoryInfo y FileInfo recopilan más datos sobre la carpeta y los archivos de los necesarios, por lo que requieren más tiempo y memoria que los necesarios.


Puede usar Path.GetFileNameWithoutExtension :

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

Aunque estoy sorprendido de que no haya una forma de obtener esto directamente desde FileInfo (o al menos no puedo verlo).


Si el nombre del archivo contiene el directorio y no debe perder el directorio:

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


Solo para que conste:

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

De esta manera no usas StringBuilder sino String.Join() . También tenga en cuenta que Path.GetFileNameWithoutExtension() necesita una ruta completa ( fi.FullName ), no fi.Name como vi en una de las otras respuestas.



Utilice Path.GetFileNameWithoutExtension . La ruta está en el espacio de nombres System.IO.


prueba esto,

string FileNameAndExtension = "bılah bılah.pdf"; string FileName = FileNameAndExtension.Split(''.'')[0];


FileInfo conoce su propia extensión, por lo que simplemente puede eliminarla

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

o si está paranoico, puede aparecer en el medio o desea microoptimizar:

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



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