2010-01-08 7 views
6

Si tengo una absoluta DirectoryInfo ruta y un pariente FileInfo ruta, ¿cómo puedo combinar en un absoluto FileInfo camino?DirectoryInfo y un camino FileInfo

Por ejemplo:

var absoluteDir = new DirectoryInfo(@"c:\dir"); 
var relativeFile = new FileInfo(@"subdir\file"); 
var absoluteFile = new FileInfo(absoluteDir, relativeFile); //-> How to get this done? 

Respuesta

7

Si absoluteDir y relativeFile existen con el único propósito de ser utilizados para crear absoluteFile, el uso probablemente se quede con strings simples para ellos y deje absoluteFile como FileInfo.

var absoluteDir = @"c:\dir"; 
var relativeFile = @"subdir\file"; 
var absoluteFile = new FileInfo(Path.Combine(absoluteDir, relativeFile)); 

Si de lo contrario realmente los necesita para ser mecanografiadas, entonces debería usar Path.Combine aplica a la OriginalPath de cada uno de ellos, como por ejemplo en:

var absoluteDir = new DirectoryInfo(@"c:\dir"); 
var relativeFile = new FileInfo(@"subdir\file"); 
var absoluteFile = new FileInfo(Path.Combine(absoluteDir.OriginalPath), relativeFile.OriginalPath)); 
+1

¡Gracias! Por lo tanto, aparentemente, no existe una clase real para encapsular una ruta del sistema de archivos en la biblioteca de clases .NET. Por cierto: ¿no te pierdes esa clase? –

+0

No echo de menos una clase, pero tal vez una sobrecarga de constructor que acepta dos o más FileSystemInfo (la clase base de FileInfo y DirectoryInfo) o cadenas usando params. El constructor los combinaría todos. –

0

Prueba esto:

Path.Combine(absolute, relative); 
0

Path.Combine?

+0

hace este trabajo con DirectoryInfo y FileInfo ¿o solo con cadenas? –

+0

Solo cadenas; ¿No puedes trabajar con 'dir.FullName' o' file.FullName'? –

2

Puede usar la propiedad FullPath en la clase FileInfo.

FileInfo.FullPath les permite conocer la trayectoria calificada por completo, mientras que

FileInfo.OriginalPath le dará la ruta relativa especificada.

Si solo desea combinar con diferentes pathes, p. el archivo que desea agregar la ruta relativa a una ruta alternativa, entonces debe usar Path.Combine() para esto, como se indicó anteriormente.

Cuestiones relacionadas