2010-05-27 16 views
5

Lo que quiero decir con esta pregunta es que cuando necesita almacenar o pasar una URL, usar una cadena es probablemente una mala práctica, y un mejor enfoque sería usar un tipo de URI. Sin embargo, es tan fácil hacer que las cosas complejas sean más complejas e hinchadas.¿Hay un tipo más correcto para pasar la ruta del archivo y el nombre del archivo a un método

Entonces, si voy a escribir en un archivo en el disco, ¿le paso una cadena, como el nombre del archivo y la ruta del archivo, o hay un tipo mejor que se adapte mejor al requisito?

¿Este código parece torpe y propenso a errores? También necesitaría verificar un poco si es un nombre de archivo válido, si la cadena contiene datos y la lista continúa.

privada vacío SaveFile (fileNameAndPath cadena) {// El cosas normales para guardar el archivo }

Respuesta

5

Una cadena está bien para el nombre de archivo. .Net Framework usa cadenas para nombres de archivos, eso parece estar bien.

Para validar el nombre de archivo, puede probar y usar una expresión regular o verificar los caracteres no válidos en System.IO.Path.GetInvalidFileNameChars. Sin embargo, probablemente sea más fácil manejar los casos excepcionales de nombres de archivo no válidos al manejar la excepción que ocurrirá cuando intente crear el archivo. Además, debe hacer esto de todos modos ...

+0

Hmm Estoy tratando de evitar que otras personas que usan mi código no cometan errores, ¿las expresiones regulares no aumentarían el probable fallo de mi código? –

+0

Creo que tienes un punto. Mi enfoque personal aquí no sería validar el nombre del archivo en su método, pero esas fueron las dos ideas de validación que se me ocurrieron. Puede decirse que el usuario de su método debe asegurarse de pasar un nombre de archivo válido a su método o esperar que se genere una excepción. – philhobgen

4

lamentable, ya que es, la cadena es la forma idiomática de hacer esto en .NET - si mira cosas como constructores FileStream, etc., usan cadenas.

Usted podría considerar usar FileInfo (o DirectoryInfo) pero eso sería algo inusual.

+0

Esa es la cosa, tendrá que utilizar 2 objetos sólo por la ubicación y el nombre del archivo. Sin embargo, ¿la seguridad que le daría no vale la pena la sobrecarga en la memoria? Me doy cuenta de que las cuerdas son la norma, pero ¿es eso correcto? –

+0

@Rihan: Depende - ¿en qué seguridad estás pensando exactamente? No estoy seguro de que 'FileInfo' haga mucha validación. Te sugiero que pienses sobre los errores que quieres evitar y comprueba si 'FileInfo' realmente te ayuda o no. –

1

Puede usar FileInfo (desde System.IO) para pasarlo, pero las cadenas son más o menos estándar cuando se hace referencia a archivos.

Siempre se puede usar Path.GetFileName ({yourstring}) para obtener el nombre de archivo de la ruta.

0

La cadena está bien, pero usted debe esforzarse para asegurarse de que el archivo se guarde en el directorio que espera.

0

Si está trabajando con una ruta de archivo, una cadena es habitual.

Si está trabajando con una URL, podría considerar usar la clase System.Uri, p. Ej.

Uri myUri = new Uri(myUrl, UriKind.Absolute); 

Esto le permitirá trabajar con propiedades tales como uri.Host, uri.Absolute ruta etc. También le dará una matriz de cadenas (segmentos) de las subcarpetas separadas en la url.

MSDN información aquí: System.Uri

+0

Bueno, esa es exactamente la razón por la que hice esta pregunta. He estado trabajando con URL's como cadenas debido al código heredado, y luego tuve la oportunidad de implementar algunas nuevas funcionalidades, y cambié una sección del código, para no usar cadenas, sino un Uri. Y hace que el código sea mucho más legible y robusto. Me sorprende que todavía trate una ubicación en un archivo en el disco como una cadena. Supongo que así son las cosas en este punto. –

+1

Los nombres de archivo como cadenas son la norma. No olvide que puede usar System.IO.Path para manipular esas cadenas de manera más segura, p. Path.Combine(), Path.GetFileName() y Path.GetFullPath() ... –

Cuestiones relacionadas