akadawa
Goto Top

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.

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);
            
        }
    }
}

Content-ID: 393374

Url: https://administrator.de/contentid/393374

Ausgedruckt am: 19.12.2024 um 14:12 Uhr

bloodstix
bloodstix 20.11.2018 aktualisiert um 14:45:32 Uhr
Goto Top
Hallo,

erstmal: Du solltest dich mal ein wenig sortieren. Wofür
string cfgFileName = @"\installFiles.cfg";  
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
137846
Lösung 137846 20.11.2018 aktualisiert um 15:17:02 Uhr
Goto Top
Wenn du schon "Linq" einbindest dann als eine Variante von vielen:
// ... 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
Gruß A.
akadawa
akadawa 20.11.2018 um 15:36:00 Uhr
Goto Top
Danke, hat mir wirklich sehr geholfen , hab nur noch ein Problem.
Es wird in der installFiles.cfg die letzte Zeile leer angelegt.

7z1805-x64.exe
cdbxp_setup_4.5.8.6795.exe
dateienInOrdnerInCFGschreiben.exe.config
dateienInOrdnerInCFGschreiben.pdb
npp.7.5.8.Installer.x64.exe
python-3.7.0-amd64.exe
UltraVNC_1_2_22_X64_Setup.exe
teeeeeeeeeest\iview451g_x64_setup.exe
Wie kommt es dazu? Kann es leider nicht so richtig nachvollziehen.
137846
Lösung 137846 20.11.2018 aktualisiert um 15:53:57 Uhr
Goto Top
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));
akadawa
akadawa 20.11.2018 um 15:57:40 Uhr
Goto Top
Top! Ich danke dir, somit ist das "Tool" komplett face-smile
137846
137846 20.11.2018 aktualisiert um 16:07:33 Uhr
Goto Top
Zitat von @akadawa:

Top! Ich danke dir,
Keine Ursache.
somit ist das "Tool" komplett face-smile
Hust, ich hoffe mal das du alle Methodenaufrufe noch mit try catches absicherst um Zugriffsverletzungen(Rechte) und evt. offene Handles abzufangen ...
akadawa
akadawa 20.11.2018 um 16:42:47 Uhr
Goto Top
Sorry ich bin nen blutiger Anfänger. Danke für den Tipp, schau ich mir morgen mal genauer an