2010-10-01 30 views
12

Estoy intentando agregar una extensión a un archivo que se ha seleccionado en un OpenFileDialog en mi aplicación de C#. Tengo problemas con archivos que aún no tienen una extensión.Agregar extensión de archivo a archivo de extensión-menos

Aunque no he probado el método siguiente en archivos con una extensión, sé que no funciona para archivos sin una extensión (que es realmente lo que quiero trabajar aquí).

string tPath = videoPath + videoName; 
string tPath2 = Path.ChangeExtension(tPath, ".yuv"); 

tPath2 reflejará a la cabecera del cambio, pero parece no afectar el propio archivo, sólo la cadena devuelta por el método ChangeExtension. Yo acababa de seguir adelante y copiar el archivo en una nueva con el nombre y la extensión adecuada, pero estamos hablando de enormes , archivos de vídeo sin comprimir de alta definición. ¿Hay alguna manera de utilizar tPath2 con un objeto File o FileInfo que me falta?

Agradezco cualquier ayuda que alguien me puede dar aquí. Gracias.

Respuesta

3

Para llevar a cabo el cambio de nombre sin tener que hacer una copia, añade esta línea al final:

System.IO.File.Move(tPath, tPath2); 

(File.Move(src, dst) hace lo mismo que FileInfo.MoveTo(dst) hace)

Para su problema de archivos sin una extensión, intente esto:

if(string.IsNullOrEmpty(Path.GetExtension(tPath)){ 
    tPath += ".yuv"; 
} 
+1

Esto funciona bastante bien también. Me ahorra tener que crear una instancia de FileInfo también. –

+0

Me alegra ayudar a algunos; las clases FileInfo/File y DirectoryInfo/Directory tienen muchas funciones duplicadas, por lo que pueden funcionar de manera eficiente cuando tiene que realizar muchas operaciones en la misma instancia (usando las clases de instancia), o solo una operación (usando el clases estáticas). ¡Es bastante útil, imo! –

+0

@Rich: No es que sea terriblemente importante, pero tengo curiosidad por saber por qué esto está marcado como la respuesta cuando publiqué la misma solución varios minutos antes. –

10

La clase Path simplemente le permite realizar manipulaciones en un archivo de ruta (es decir, el string) a un nivel alto, no un archivo en sí.

Tendrá que utilizar File.Move con el fin de cambiar el nombre de un archivo (incluyendo sólo añadir una extensión).

string tPath = videoPath + videoName; 
string tPath2 = Path.ChangeExtension(tPath, ".yuv"); 

File.Move(tPath, tPath2); //effectively changes the extension 
3

Necesitas realmente llamar FileInfo.MoveTo cambiar el nombre del archivo. Un cambio de nombre de archivo, en la misma unidad física, suele ser una operación rápida, por lo que realmente no importa que el archivo sea enorme.

+0

Voy a probarlo ahora. Se ve bien, sin embargo. –

+0

Eso fue todo. Voy a marcar esto como la respuesta en 4 minutos ... –

3

Estás a cambiar el nombre del archivo así que por qué no te haces "miruta" + ".ext"?

No hay nada sobre el cambio de extensión de archivo que necesita cambiar el contenido del archivo, simplemente le dice al sistema operativo qué hacer con él.

+0

Eso es cierto, pero no necesito trabajar con la cadena; Necesito que el sistema operativo cambie la extensión del archivo. Puede que me esté perdiendo algo que dices ... No sería la primera vez. –

+1

Supongo que lo que quise decir es que la clase Path solo proporciona un conjunto de métodos de utilidad para la manipulación de cadenas de rutas. Si realmente desea cambiar la ruta del archivo real, necesita usar la clase File, como han señalado otros. –

Cuestiones relacionadas