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-Key: 393374

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

Printed on: April 23, 2024 at 19:04 o'clock

Member: bloodstix
bloodstix Nov 20, 2018 updated at 13:45:32 (UTC)
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
Mitglied: 137846
Solution 137846 Nov 20, 2018 updated at 14:17:02 (UTC)
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.
Member: akadawa
akadawa Nov 20, 2018 at 14:36:00 (UTC)
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.
Mitglied: 137846
Solution 137846 Nov 20, 2018 updated at 14:53:57 (UTC)
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));
Member: akadawa
akadawa Nov 20, 2018 at 14:57:40 (UTC)
Goto Top
Top! Ich danke dir, somit ist das "Tool" komplett face-smile
Mitglied: 137846
137846 Nov 20, 2018 updated at 15:07:33 (UTC)
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 ...
Member: akadawa
akadawa Nov 20, 2018 at 15:42:47 (UTC)
Goto Top
Sorry ich bin nen blutiger Anfänger. Danke für den Tipp, schau ich mir morgen mal genauer an