2016-04-20 9 views
0

Ich habe einen Code erstellt, um die Versionsnummer eines Verzeichnisnamens zu erhalten, zum Beispiel diesen Ordner mit dem Namen Update5.0.1. Ich brauche nur den "5.0.1" -Teil. Ich gehe den Verzeichnispfad zu dieser Funktion:Fehler beim Abrufen der Versionsnummer eines Verzeichnisnamens

public int CompareVersion(string NovoUpdate, string Config) 
{ 
     int Status = 0; 
     try 
     { 
      ExeConfigurationFileMap configOld = new ExeConfigurationFileMap(); 
      configOld.ExeConfigFilename = Config; 
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configOld, ConfigurationUserLevel.None); 
      if (config.AppSettings.Settings["Version"] != null) 
      { 
       string value = config.AppSettings.Settings["Version"].Value.ToString(); 
       Version ver = Version.Parse(value); 
       Version version = null; 
       Version VersionFinal = null; 
       var lastVersion = new DirectoryInfo(NovoUpdate).FullName; 
     //.Where(d => d.Name.StartsWith("UPDATE_")) 
     .Select(d => new { Directory = d, Token = d.Name.Split('_') }) 
     .Where(x => x.Token.Length == 3 && Version.TryParse(x.Token[2], out version)) 
     .Select(x => new { x.Directory, Date = x.Token[1], Version = version }) 
     .OrderByDescending(x => x.Version) 
     .FirstOrDefault(); 
       if (lastVersion != null) 
       { 
        VersionFinal = Version.Parse(lastVersion.ToString()); 
       } 

       if (ver >= VersionFinal) 
        Status = 1; 
       else 
        Status = 0; 
      } 
      else Status = -1; 
     } 
     catch (Exception ex) 
     { 
      Erro NovoErro = new Erro(); 
      Program.Erro = ex.ToString(); 
      NovoErro.ShowDialog(); 
     } 
     return Status; 
} 

ich auf dieser Linie einen Fehler haben:

var lastVersion = new DirectoryInfo(NovoUpdate); 
      //.Where(d => d.Name.StartsWith("UPDATE_")) 
      .Select(d => new { Directory = d, Token = d.Name.Split('_') }) 

Ich habe alredy versucht, die „letzteversion“, um Zeichenfolge zu ändern oder verwenden Sie einfach die "NovoUpdate" Zeichenfolge anstelle von DirectoryInfo. Ich weiß nicht wirklich wie Linq verwenden Jede Hilfe wäre aprecciated.

Antwort

0

Hier ist die letzte voll funktionierenden Code erhalten:

public int CompareVersion(string NovoUpdate, string Config, bool ServiceChanged) 
     { 
      Global.Erro = ""; 
      Global.ErroGrave = false; 
      int Status = 0; 
       ExeConfigurationFileMap configOld = new ExeConfigurationFileMap(); 
       configOld.ExeConfigFilename = Config; 
       Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configOld, ConfigurationUserLevel.None); 
      if (config.AppSettings.Settings["Version"] != null) 
      { 
       string value = config.AppSettings.Settings["Version"].Value.ToString(); 
       Version ver = Version.Parse(value); 
       Version versione = null; 
       if (System.IO.Path.GetFileName(NovoUpdate).ToLower() == "orcaservice") 
       { 
        string name2 = Directory.GetParent(NovoUpdate).ToString(); 
        string Versionn = System.IO.Path.GetFileName(name2); 
        string[] Versions2 = Versionn.Split('_'); 
        Version.TryParse(Versions2[2], out versione); 
       } 
       else 
       { 


       } 
       if (ver < versione) 
        Status = 1; 
       else 
        Status = 0; 
      } 

      else Status = -1; 




      return Status; 
     } 
0

Ich glaube, Sie vergessen haben, Methode "GetDirectories" zu nennen, wie:

new DirectoryInfo(NovoUpdate).GetDirectories().Select...

+0

aber .GetDirectories werden alle Verzeichnisse innerhalb "NovoUpdate" aufzählen Verzeichnis. Ich muss nur überprüfen, die Version des aktuellen Verzeichnisses, die Pfad ist auf "NovoUpdate" var –

0

Sie nicht Linq benötigen, wenn Sie nur Version aus dem Verzeichnisnamen extrahieren möchten.

Versuchen

string path = @"C:\Path\Update5.0.1"; 
string name = System.IO.Path.GetFileName(path); 
string match = System.Text.RegularExpressions.Regex.Match(name, @"\d\.\d\.\d"); 
string version = match.Value; 

Sie werden "5.0.1"

+0

der Ordner ist wie dieser Name "UPDATE_20080311_5.0.0" Ihr Code nur returs "20080" –

+0

ja, mein schlechtes. siehe aktualisierte 3. Zeile (mit \. statt nur.) – Artem