2013-02-15 39 views
50

Una possibilità sarebbe quella di fare System.IO.Directory.GetParent() un paio di volte. Esiste un modo più agevole di spostare alcune cartelle da dove risiede l'assembly in esecuzione?Come spostarsi su alcune cartelle?

Quello che cerchiamo di fare è di trovare un file di testo che si trova una cartella sopra la cartella dell'applicazione. Ma l'assembly si trova all'interno del cestino, che si trova a poche cartelle nella cartella dell'applicazione.

+1

Quante cartelle? – CR41G14

+0

dire 4 cartelle in su. – developer747

+1

di solito un percorso relativo fa il trucco come '.. \ .. \ .. \ .. \ Downfolder' ma dipende da cosa stai provando a fare esattamente questo per ...? – DiskJunky

risposta

2

È possibile utilizzare .. \ percorso per andare un livello superiore, .... \ percorso per andare due livelli dal percorso.

È possibile utilizzare la classe percorso troppo.

C# Path class

1

forse si potrebbe utilizzare una funzione se volete dichiarare il numero di livelli e metterlo in funzione?

private String GetParents(Int32 noOfLevels, String currentpath) 
{ 
    String path = ""; 
    for(int i=0; i< noOfLevels; i++) 
    { 
     path += @"..\"; 
    } 
    path += currentpath; 
    return path; 
} 

E si potrebbe chiamare in questo modo:

String path = this.GetParents(4, currentpath); 
+8

questo non verrà nemmeno compilato ... –

2

Il metodo seguenti ricerche di un file che inizia con il percorso di avvio dell'applicazione (* .exe cartella). Se il file non viene trovato lì, le cartelle principali vengono cercate fino a quando non viene trovato il file o è stata raggiunta la cartella principale. null viene restituito se non è stato trovato il file.

public static FileInfo FindApplicationFile(string fileName) 
{ 
    string startPath = Path.Combine(Application.StartupPath, fileName); 
    FileInfo file = new FileInfo(startPath); 
    while (!file.Exists) { 
     if (file.Directory.Parent == null) { 
      return null; 
     } 
     DirectoryInfo parentDir = file.Directory.Parent; 
     file = new FileInfo(Path.Combine(parentDir.FullName, file.Name)); 
    } 
    return file; 
} 

Nota: Application.StartupPath solito è usato in applicazioni WinForms, ma funziona in applicazioni console pure; tuttavia, sarà necessario impostare un riferimento all'assembly System.Windows.Forms. È possibile sostituire Application.StartupPath da
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), se si preferisce.

2

Questo è ciò che ha funzionato meglio per me:

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));

Recupero del percorso 'giusto' non era il problema, l'aggiunta di '../', ovviamente, fa quello, ma dopo che, la stringa data non è utilizzabile, perché aggiungerà semplicemente "../" alla fine. Il suo ambiente con Path.GetFullPath() ti darà il percorso assoluto, rendendolo utilizzabile.

94

altro modo semplice è quello di fare questo:

string path = @"C:\Folder1\Folder2\Folder3\Folder4"; 
string newPath = Path.GetFullPath(Path.Combine(path, @"..\..\")); 

Nota Questo va due livelli in su.Il risultato sarebbe: newPath = @"C:\Folder1\Folder2\";

1

questo può aiutare

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml"; 
if (File.Exists(parentOfStartupPath)) 
{ 
    // file found 
} 
5

se c: \ cartella1 \ cartella2 \ Folder3 \ bin è il percorso quindi il seguente codice restituirà la cartella di base percorso della cartella bin

string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()); 

cioè c: \ cartella1 \ cartella2 \ folder3

se si vuole percorso cartella2 allora si può ottenere la directory da

string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString(); 

quindi si otterrà percorso come c: \ Folder1 \ cartella2 \

Problemi correlati