Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Recuperare percorso
Forum - C# / VB.NET - Recuperare percorso

Avatar
Jollyman2 (Normal User)
Newbie


Messaggi: 19
Iscritto: 22/01/2011

Segnala al moderatore
Postato alle 11:31
Giovedì, 21/04/2011
Salve a tutti.
Ho un grosso problema:
come faccio a ricavare il percorso di un file da una stringa?
Mi spiego meglio:
ho una stringa del tipo C:\csharp.exe -h
dove C:\csharp.exe è il percorso
-h è l'argomento
Io come faccio a recuperare solo il percorso?
Ho provato ad usare la classe Path e i suoi metodi, ma nessuno va.
Al massimo c'è un metodo GetFileNameWithoutExtension che mi restituisce come estensione del file .exe -h.
Vi prego aiutatemi.

PM
Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 11:36
Giovedì, 21/04/2011
Usi le regular expressions, nel framework c'è un namespace apposito dove spicca in particolare la classe Regex.
http://msdn.microsoft.com/it-it/library/system.text.regula ...
Ci sono anche due capitoli dedicati nella guida di Totem.

Ultima modifica effettuata da Question il 21/04/2011 alle 11:43
Non posso con l'array, ho già provato. Potrebbe dare errore se lavoro con una stringa tipo C:\c-sharp.exe -h - Jollyman2 - 21/04/11 11:44
lo so, c'ho pensato immediatamente dopo... infatti se noti ho modificato il post a e 43 mentre tu hai scritto il commento a e 44 - Question - 21/04/11 11:55
PM
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 19:57
Giovedì, 21/04/2011
ciao, prova con questa funzioncina ;)

Codice sorgente - presumibilmente VB.NET

  1. Public Function FolderFromFileName(ByVal FileFullPath As String) As String
  2.  
  3.     Dim intPos As Integer
  4.     intPos = FileFullPath.LastIndexOfAny("\")
  5.  
  6.     If intPos = -1 Then
  7.       intPos = FileFullPath.LastIndexOfAny("/")
  8.     End If
  9.  
  10.     intPos += 1
  11.  
  12.     Dim sBuffer As String = FileFullPath.Substring(0, intPos)
  13.  
  14.     'Decommentare la riga seguente se non si vuole includere il backslash finale
  15.     'If sBuffer.EndsWith("\") Then sBuffer = sBuffer.Remove(sBuffer.Length - 1)
  16.  
  17.     Return sBuffer
  18.  
  19.   End Function


purtroppo non funzionerebbe perché a lui serve anche il nome del file e non è detto che il percorso termini con \ o con / - Question - 21/04/11 20:05
PM
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 20:29
Giovedì, 21/04/2011
chiedo venia, avevo capito male

in tal caso bisogna allora lavorare sull'estensione del file, se devi scorporare il percorso completo dal parametro di comando si presuppone che l'estensione sia sempre .exe o al limite .com poichè solitamente solo questi tipi di files supportano la riga di comando

potrebbe essere una cosa di questo tipo, penso che poi si possa ulteriormente affinare

Codice sorgente - presumibilmente VB.NET

  1. Dim sOrig As String = "c:\test.exe -h -d -qualsiasi cosa"
  2.  
  3.     Dim iPos As Integer = sOrig.IndexOf(".exe")
  4.  
  5.     Dim sDest As String = sOrig.Substring(0, iPos)
  6.  
  7.     sDest = sDest & ".exe"
  8.  
  9.     MessageBox.Show(sDest)


E' molto complicato fare questo metodo. Neanche il secondo codice va bene perché se il percorso è C:\prova.exe\seconda_prova.exe restituirebbe percorsi errati. Seconda cosa : non è per forza .exe l'estensione. Non importa ho sistemato il codice in modo provvisorio così da non dare percorsi errati. - Jollyman2 - 22/04/11 09:17
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 10:59
Venerdì, 22/04/2011
Non capisco perché non puoi usare le regex.

bella domanda - Question - 22/04/11 12:56
PM
Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 13:04
Venerdì, 22/04/2011
Beh..
Personalmente avrei scelto le regex, ma comunque potresti anche fare una cosa del genere:
1) trovi l'ultimo index del carattere "."
2) ricerchi nella sottostringa che parte dal punto in poi il primo " "
3) problema risolto, usi substring sulla stringa originaria partendo da 0 sino all'indice dello spazio :pat:

N.B. questa soluzione funziona solamente se gli attributi NON hanno un punto (es. "-h.m") e se c'è sempre almeno uno spazio dal percorso (quest'ultimo non è però un grande problema dato che comunque quando non è presente un carattere come index viene restituito -1, il che starebbe ad indicare che hai già ottenuto la path)

PM