2011-10-14 15 views
13

¿Existe mucha diferencia entre utilizar los métodos estáticos del objeto File en lugar de crear un nuevo objeto FileInfo y llamar a esos métodos?File.Delete() versus FileInfo.Delete()

+2

uno es estático, el otro toma una instancia, claro como la luz del día! :) – leppie

Respuesta

10

La única diferencia es que File debe resolver la ruta especificada (suponiendo que es relativo), mientras que el FileInfo ya debería haber tener la camino resuelto.

+0

Quiere decir que dado que la ruta es relativa, el trabajo debe realizarse inmediatamente antes de que 'File.Delete()' llame al método Win32 Delete. Mientras que con 'FileInfo', la ruta ya se habría resuelto a una ruta absoluta al momento de la creación. ¿Es esta una interpretación correcta de lo que dices? En otras palabras, este es el trabajo que CLR hace detrás de las escenas que podría afectar el rendimiento dado que 'File.Delete()' se llama con la misma frecuencia relativa. –

+0

@TimCoker - Eso es correcto. Si ya tiene un FileInfo, puede guardar una llamada a 'Path.GetFullPathInternal', que hace un poco de trabajo para normalizar/resolver la ruta. Como señala @errorstacks, uno es un método estático y uno es una instancia. Por lo tanto, no puede llamar a FileInfo.Delete sin una instancia de FileInfo. Suponiendo que tienes eso, entonces la única diferencia es la resolución de la ruta. – CodeNaked

0

No, ellos están duplicados por conveniencia

0

Espero que esto te ayuda ...

IO.FileInfo proporciona métodos de instancia para la creación, copiar, eliminar, mover y apertura de archivos, y ayuda en la creación de System.IO.FileStream objects. Esta clase no puede heredarse.

eso significa que necesita crear una instancia/objeto de FileInfo para llevar a cabo este proceso.

IO.File proporciona métodos estáticos para la creación, copia, eliminación, movimiento y apertura de archivos, y ayuda en la creación de objetos System.IO.FileStream.

eso significa que no necesita crear una instancia/objeto de FileInfo para llevar a cabo este proceso.

ver los enlaces Tes Para obtener más información

http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx

http://msdn.microsoft.com/en-us/library/system.io.file.aspx

1

Depende. Si está realizando una sola operación, use la clase File y si está realizando varias operaciones en el mismo archivo, use FileInfo.

EDIT: Hice este punto ya que tengo entendido que los métodos estáticos de la clase File siempre verificarán la seguridad. Pero si está reutilizando la instancia de FileInfo, los métodos harán la comprobación de seguridad solo por primera vez y no en cada una de las siguientes.

+3

Cuando baje la votación, seguro que sería refrescante saber por qué ... Este es un sitio de preguntas y respuestas y también un recurso de aprendizaje ... si la respuesta es totalmente a la hora del almuerzo, brinde información ... – Jesse

+0

Tengo curiosidad por la razón por la que también votaron negativamente. Hiciste un punto interesante allí. –

+1

No he votado negativamente, pero probablemente lo hubiera hecho. Usted proporcionó un fundamento muy vago para su recomendación. Haz una copia de seguridad con referencias, si crees que es correcto. –

4

Ambos están llamando Win32Native.DeleteFile()

0

Casi hay ninguna diferencia. Ambos eliminan el archivo si existe y lanzan una excepción si no existe.

+0

Eso no es cierto (al menos ya no es cierto) FileInfo.Delete no hace nada si el archivo no existe, consulte http://msdn.microsoft.com/en-us/library/system.io.fileinfo.delete(v = vs.110) .aspx – Robba