2017-10-24 3 views
0

Ich habe einige Schwierigkeiten zu versuchen, herauszufinden, wie erfolgreich die "DaysPast" in der foreach/if-Schleife als Doppel hinzuzufügen. Es ist derzeit eine Zeichenfolge und die Warnung fragt nach einem Double. Der Code selbst fungiert als Datei-/Verzeichnislöscher, der auf eine bestimmte Anzahl von Tagen eingestellt ist. Jede Hilfe wird sehr geschätzt!String/Doppel-Konvertierung für die Konsole App

App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="FilePath" value="C:\testFolder\" /><!--root folder --> 
    <add key="TimeSpan" value="-14 days"/><!--adjust days --> 
    </appSettings> 
</configuration> 

Program.cs

using System; 
using System.IO; 
using System.Configuration; 
using System.Text; 

public class Program 
{ 

static void Main(string[] args) 
{ 
    //number of days from App.config 
    String daysPast = ConfigurationManager.AppSettings["TimeSpan"]; 

    String path = ConfigurationManager.AppSettings["FilePath"]; 

    // Reference to a directory. 
    DirectoryInfo di = new DirectoryInfo(path); 

    // Reference to each directory in that directory. 
    DirectoryInfo[] diArr = di.GetDirectories(); 

    //StreamWriter file name 
    string fileName = "fileResults_" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm") + ".txt"; 

    try 
    { 
     foreach (DirectoryInfo dir in diArr) 
     { 
      if (dir.LastWriteTime < DateTime.Now.AddDays(daysPast)) 
       Directory.Delete(dir.FullName, true); 

      using (StreamWriter sw = new StreamWriter(fileName, true)) 
      { 
       sw.WriteLine("File(s) deleted on: " + DateTime.Now); 
       sw.WriteLine("============================================"); 
       sw.WriteLine(""); 
       sw.WriteLine(fileName); 
       sw.WriteLine(""); 
       sw.WriteLine("End of list"); 
       sw.WriteLine(""); 
       sw.Flush(); 
      } 
     } 
    } 

    catch (InvalidCastException) 
    { 
     Console.WriteLine("There was an issue, please try again."); 
    } 
} 
} 
+0

' int.TryParse() 'oder' double.TryP Arsch() '? – David

+1

Sie müssen das in den numerischen Teil und die Einheiten aufteilen und sie separat "parsen". Aus einer Codierperspektive wäre es leichter, eine 'TimeSpan' zu stringifizieren/analysieren und dann die '-14 Tage'-Zeichenkette zur Laufzeit basierend auf dem Wert der' TimeSpan' zu erzeugen. Wenn Sie jedoch die Konfiguration manuell bearbeiten möchten, müssen Sie möglicherweise die zusätzliche Arbeit ausführen, je nachdem, welche Art von Benutzern Sie haben: '' ist für einige vernünftig, für andere weniger. Wo ich arbeite, würde ich das tun und es kommentieren, und wenn dieser eine Kerl Schwierigkeiten hat, wird er es trotzdem tun. –

+0

@EdPlunkett - Vielen Dank, ich schätze Ihre Einsicht. – user7701115

Antwort

0

Ended up Ersetzen der "DateTime.Now.AddDays (daysPast)", mit „DateTime.Parse (daysPast) ":

try 
    { 
     foreach (DirectoryInfo dir in diArr) 
     { 
      if (dir.LastWriteTime < DateTime.Parse(daysPast)) 
       Directory.Delete(dir.FullName, true); 


      using (StreamWriter sw = new StreamWriter(fileName, true)) 
      { 
       sw.WriteLine("File(s) deleted on: " + DateTime.Now); 
       sw.WriteLine("============================================"); 
       sw.WriteLine(""); 
       sw.WriteLine(dir); 
       sw.WriteLine(""); 
       sw.WriteLine("End of list"); 
       sw.WriteLine(""); 
       sw.Flush(); 
      } 
     } 
    }