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 archivo sin las extensiones? ( file1
` file2
` file3
)
builder
será una instanciaStringBuilder
en el código del OP. Es solo un ejemplo de uso de GetFileNameWithoutExtension: probablemente será mejor escribir su propio código que lo llame.GetFileNameWithoutExtension
solo elimina la extensión final . Por ejemplo, el nombre del archivoexample.es6.js
se convertiráexample.es6
Uso
Path.GetFileNameWithoutExtension()
.fuente
Esta solución también evita la adición de una coma final.
No me gusta 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 de lo necesario.
fuente
Directory.GetFiles
a cualquier díaDirectoryInfo.GetFiles
, si todo lo que quiero son nombres de archivo.Uso
Path.GetFileNameWithoutExtension
. La ruta está en el espacio de nombres System.IO.fuente
Esto devuelve el nombre del archivo solo sin el tipo de extensión. También puede cambiarlo para obtener tanto el nombre como el tipo de archivo
fuente: https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx
fuente
Como respuesta adicional (o para componer las respuestas existentes), podría escribir un método de extensión para lograr esto 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.
Editar: también creo que este método probablemente podría simplificarse o hacerse increíble 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:
fuente
FileInfo
conoce su propia extensión, por lo que podría eliminarlao si eres paranoico de que pueda aparecer en el medio, o si quieres microoptimizar:
fuente
si el nombre del archivo contiene el directorio y no necesita perder el directorio:
fuente
prueba esto,
fuente
Para que conste:
De esta manera no usas
StringBuilder
peroString.Join()
. También tenga en cuenta quePath.GetFileNameWithoutExtension()
necesita una ruta completa (fi.FullName
), nofi.Name
como vi en una de las otras respuestas.fuente
fuente