C-Sharp - Dateiauflistung mit Directory.GetFiles ohne eigenen Namen und anderer Datei
Guten Tach,
ich möchte gerne die Dateien und die Dateien im Unterordner auslesen und in eine CFG-Datei schreiben lassen.
Das klappt auch ganz gut, jedoch beinhaltet die liste den Namen der CFG-Datei und den eigenen Anwendungsnamen.
Diese beiden Dateien (installFiles.cfg und listAllPrograms.exe) sollen aus dem Array entfernt werden oder erst gar nicht gelistet werden, jedoch finde ich keine Lösung.
ich möchte gerne die Dateien und die Dateien im Unterordner auslesen und in eine CFG-Datei schreiben lassen.
Das klappt auch ganz gut, jedoch beinhaltet die liste den Namen der CFG-Datei und den eigenen Anwendungsnamen.
Diese beiden Dateien (installFiles.cfg und listAllPrograms.exe) sollen aus dem Array entfernt werden oder erst gar nicht gelistet werden, jedoch finde ich keine Lösung.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace dateienInOrdnerInCFGschreiben
{
class Program
{
static void Main(string args)
{
string cfgFileName = @"\installFiles.cfg";
string excludeCFG = "installFiles.cfg";
string excludeEXE = "listAllPrograms.exe";
string mainPath = Environment.CurrentDirectory;
string files = Directory.GetFiles(mainPath, "*", SearchOption.AllDirectories);
if ((!File.Exists(mainPath + @"\installFiles.cfg")))
{
FileStream fs = File.Create(mainPath + cfgFileName);
fs.Close();
}
for (int i = 0; i < files.Length; i++)
{
files[i] = files[i].Replace(mainPath + @"\","");
}
File.WriteAllLines(mainPath + cfgFileName, files);
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 393374
Url: https://administrator.de/contentid/393374
Ausgedruckt am: 19.12.2024 um 14:12 Uhr
7 Kommentare
Neuester Kommentar
Hallo,
erstmal: Du solltest dich mal ein wenig sortieren. Wofür wenn du dann doch in einer anderen Zeile wieder den Dateinamen als String hinschreibst statt die Variable zu nutzen?
Dann: Wo ist denn das Problem in der For-Schleife eine If-Abfrage einzubauen die prüft ob das aktuelle Array-Element eine der beiden auszuschließenden Dateien ist und diese, falls true, aus dem Array kickt?
Gruß
Bloody
erstmal: Du solltest dich mal ein wenig sortieren. Wofür
string cfgFileName = @"\installFiles.cfg";
Dann: Wo ist denn das Problem in der For-Schleife eine If-Abfrage einzubauen die prüft ob das aktuelle Array-Element eine der beiden auszuschließenden Dateien ist und diese, falls true, aus dem Array kickt?
Gruß
Bloody
Wenn du schon "Linq" einbindest dann als eine Variante von vielen:
Gruß A.
// ... Rest vom Gedöns
// Array mit den Dateinamen die zu exkludieren sind
string exclude = { "installFiles.cfg", Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location) };
// String Array passend filtern, d.h. alle Dateien außer denen aus dem Array weitergeben
string files = Directory.GetFiles(mainPath, "*", SearchOption.AllDirectories).Where(x => ! exclude.Contains(Path.GetFileName(x))).ToArray<string>();
// ... Rest vom Gedöns
Es wird in der installFiles.cfg die letzte Zeile leer angelegt.
Weil WriteAllLines am Ende jedes Array-Elements immer einen Zeilenumbruch (\r\n) anhängt, deswegen hast du am Ende auch eine leere Zeile. Schreib es mit WriteAllText rein und "joine" dafür deine Lines (string.Join) mit Zeilenumbruch dann hast du das nicht.File.WriteAllText(mainPath + cfgFileName, string.Join(Environment.NewLine,files));
Keine Ursache.
somit ist das "Tool" komplett
Hust, ich hoffe mal das du alle Methodenaufrufe noch mit try catches absicherst um Zugriffsverletzungen(Rechte) und evt. offene Handles abzufangen ...