2016-07-19 13 views
1

Ich versuche, eine Datei .fdf zu nehmen, konvertieren Sie es in ein anderes Format .g mit einem externen Befehl. Von dort versuche ich, die Quell-FDF in einen Backup-Ordner und die G-Datei in einen temporären Ordner zu verschieben.Generieren neuer Dateipfad funktioniert nicht

Um dies zu tun, ich diesen Abschnitt des Codes verwenden:

private void populateTable(string[] paths) 
    { 
     string fdf_g = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "Local\\FindReplace\\Bin\\fdf_g.exe"; 
     string g_fdf = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "Local\\FindReplace\\Bin\\g_fdf.exe"; 
     System.Collections.Generic.List <string> gFiles = new System.Collections.Generic.List<string>(); 
     foreach (string file in paths) 
     { 
      System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
      startInfo.FileName = fdf_g; 
      startInfo.Arguments = file; 
      System.Diagnostics.Process.Start(startInfo); 
      System.IO.File.Copy(file, System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "Local\\FindReplace\\BackupFDF\\" + System.IO.Path.GetFileName(file)); 
      System.IO.File.Move("FOX_" + System.IO.Path.GetFileName(file).Replace(".fdf",".g"), System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "Local\\FindReplace\\Temp\\" + "FOX_" + System.IO.Path.GetFileName(file).Replace(".fdf", ".g")); 
      gFiles.Add(System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "Local\\FindReplace\\Temp\\" + "FOX_" + System.IO.Path.GetFileName(file).Replace(".fdf", ".g")); 
     } 
     foreach (string file in gFiles) 
     { 
      System.IO.StreamReader gFile = new System.IO.StreamReader(file); 
      string line = ""; 
      while ((line = gFile.ReadLine()) != null) 
      { 
       foreach (string template in templates) 
       { 
        if (line.Contains(template) && !templatesInSelection.Contains(template)) 
        { 
         templatesInSelection.Add(template); 
        } 
       } 
      } 
     } 
     findReplaceGrid.AutoGenerateColumns = false; 
     findReplaceGrid.DataSource = templatesInSelection; 
    } 

I abd überprüft habe, die Umwandlung ganz gut funktioniert. Das Programm, wirft jedoch eine Ausnahme auf der Linie Lesung:

System.IO.File.Move("FOX_" + System.IO.Path.GetFileName(file).Replace(".fdf",".g"), System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "Local\\FindReplace\\Temp\\" + "FOX_" + System.IO.Path.GetFileName(file).Replace(".fdf", ".g")); 

Mit Ausnahme:

Additional information: Could not find file 'C:\Users\James.Hughes\Source\Repos\Find-and-Replace-Symbols\Find and Replace Symbols\bin\Debug\FOX_18_83_COD_002.g'. 

Das Konvertierungsprogramm benennt Dateien in dieses Format FOX_%origName%.g somit die String-Manipulation des ursprünglichen Dateipfades nimm den neuen Namen.

Was ich nicht verstehen kann ist, warum es versucht, auf C:\Users\James.Hughes\Source\Repos\Find-and-Replace-Symbols\Find and Replace Symbols\bin\Debug\FOX_18_83_COD_002.g' zuzugreifen, wenn es in appdata suchen sollte.

Ich bin total flummuxed, so würde jede Hilfe geschätzt werden!

+0

Es würde Ihnen wahrscheinlich helfen, Ihren Ordnerpfad nur einmal eher zu bekommen, als im gesamten diesen Code zu replizieren. Und verwenden Sie den entsprechenden speziellen Ordner, anstatt Local an den Pfad anzuhängen. Und verwenden Sie stattdessen Path.Combine statt String-Verkettung. Auf diese Weise werden Sie viele potenzielle Pfadfehler vermeiden und es wird einfacher zu erkennen sein, auf welchen Pfad Sie zugreifen möchten. Wenn Sie @ vor Ihren Strings verwenden, müssen Sie die Backslashes nicht überall vermeiden. Macht Ihren Code übersichtlicher und lesbarer. – ManoDestra

+0

Okay, das ist sinnvoll, danke, aber scheint das Problem nicht zu lösen –

+0

Gib deine Pfade auf der Konsole aus, bevor du sie verwendest, damit du sehen kannst, wo der Fehler auftritt. – ManoDestra

Antwort

1

System.IO.File.Move benötigt 2 Argumente: sourceFileName und destinationFileName. Sie haben den Pfad zu sourceFile nicht angegeben, sodass er im aktuellen Arbeitsverzeichnis (bin/Debug) gesucht wird. Versuchen Sie, den Pfad zum tatsächlichen Speicherort der Datei anzugeben.

File.Move documentation

+0

Ahh ... ja, das wäre es. Danke! –

Verwandte Themen