Zugriff auf Textdatei in der Projektliste



  • Hallo Gemeinde,

    stehe momentan total auf dem Schlauch, hoffe ihr schubst mich in die richtige Richtung.

    Folgendes: bin dabei mich näher mit C# zu befassen, VS 2019 Community. Habe für mein Projekt jetzt eine .txt Datei in der Daten stehen die häufiger geändert werden und von der Anwendung gelesen und verarbeitet werden. Diese Datei möchte ich in das Projekt aufnehmen, Soweit so gut, nur wie greife ich jetzt auf diese Datei zu?

    Thx schonmal an alle die helfen( wollen )



  • @Smitty
    Was meinst du mit "Wie greife ich auf diese Datei zu?"? Öffnen, Inhalt lesen, schreiben?
    Guck dir mal die Klassen File, FileStream, StreamReader und StreamWriter an.



  • Hi Doc,

    nur lesen.

    StreamReader streamRead = new StreamReader( "rfile.txt", Encoding.Default );
    

    und die Datei "rfile.txt" wird nicht weitergegeben, deshalb auch im Projekt, bei allen anderen .cs, .resx, ... Dateien.
    Und beim Compile nimmt das VS das eingestellte Ausgabeverzeichnis, was natürlich einen Fehler bringt



  • @Smitty

    Du solltest besser mal das ganze Problem beschreiben, ich verstehe nämlich nicht, was du vorhast und was nicht funktioniert.



  • Ok, nächster Versuch:

    In meine Projektmappe habe ich ein txt File aufgenommen, da es nicht weitergegeben wird. Muss aber beim Programmstart tlw. gelesen werden weil verschiedene Werte, z. B Revision( soll zur ProgVerrsion ) sich des öfteren ändern und nach Änderung natürlich aktuell verwendet werden soll(en).
    also z. B so:

    -> C# MyProject
    -> Properties
    ...
    -> Mainform.cs
    -> DoSomething.cs
    -> rfile.txt <- um diese Datei geht es, deren Inhalt muss ich einlesen und verarbeiten.

    Komme eigentlich von C++, hauptsächlich C++Builder. Da hab ich das schonmal gemacht, ist zwar schon eine ganze Zeit her( war 2009 ) kann mich aber nicht an grössere Probleme erinnern.
    Jetzt aber das ganze mit VisualStudio.

    Ich muss also den Inhalt der Datei rfile.txt lesen, diese Datei ist im Projekt nicht in einem Verzeichnis. Wenn ich also die exe ausserhalb der IDE starte ist diese Datei nicht da, ich muss aber trotzdem darauf zugreifen.

    Das Problem ist nicht das einlesen, verarbeiten ,,, sondern dass ich nicht weiss wie ich bei Start ausserhalb der IDE an den Inhalt der Datei komme



  • Du solltest die Datei ins Ausgabeverzeichnis (bin/debug bzw. bin/release) kopieren lassen. Dies geht, indem du im VS bei den Eigenschaften dieser Datei "CopyToOutputDir" auf "CopyIfNewer" (oder "AlwaysCopy") stellst.

    Nun kannst du von deiner Anwendung darauf zugreifen (am besten per Path.Combine(Application.StartupPath, "rfile.txt").
    Du mußt dann natürlich diese Datei auch mit weitergeben.



  • @Th69 sagte in Zugriff auf Textdatei in der Projektliste:

    Du mußt dann natürlich diese Datei auch mit weitergeben.

    und genau das will ich vermeiden.
    Sind am Ende wohl mehrere txt Dateien, eine davon ist die oben beschriebene, die automatisch von svn generiert wird.

    Habe mal gegoogled, kam was mit 'additional Files', aber das ist mit Kanonen auf Spatzen ...

    Oder mal als Ansatz: bin ich der einzige der die svn Revision in seiner VersionNr. verwendet? Wie macht ihr das?
    🤔 🤔 🤔



  • Das ist aber der notwendige Weg, sofern du diese Datei von der Anwendung lesen möchtest.
    Alternative wäre noch, daß du die Datei als Ressource aufnimmst und dann von der Anwendung ausliest: Reading embedded files at runtime with C#.



  • @Smitty sagte in Zugriff auf Textdatei in der Projektliste:

    @Th69 sagte in Zugriff auf Textdatei in der Projektliste:

    Du mußt dann natürlich diese Datei auch mit weitergeben.

    und genau das will ich vermeiden.

    Wie soll das gehen? Du willst Deine exe-Datei weitergeben, und die soll dann eine Datei einlesen, die nicht da ist ... 🤔



  • @Th69 sagte in Zugriff auf Textdatei in der Projektliste:

    Das ist aber der notwendige Weg, sofern du diese Datei von der Anwendung lesen möchtest.
    Alternative wäre noch, daß du die Datei als Ressource aufnimmst und dann von der Anwendung ausliest: Reading embedded files at runtime with C#.

    Genau sowas habe ich gesucht. Dank Dir vielmals 👍 👍 👍



  • @Belli sagte in Zugriff auf Textdatei in der Projektliste:
    ...
    Wie soll das gehen? Du willst Deine exe-Datei weitergeben, und die soll dann eine Datei einlesen, die nicht da ist ... 🤔

    Ganz einfach:

    • die Textdatei in die Projektmappe aufnehmen, auf die Ebene der .cs Dateien
    • dann sowas hier:
    using System.Reflection;
    
    private string GetEmbeddedTxtFileContent()
    {
        var assembly = Assembly.GetExecutingAssembly();
        var resourceName = "YourNamespaceHere.YourFileNameHere";
        using (Stream stream = assembly.GetManifestResourceStream(resourceName))
        using (StreamReader reader = new StreamReader(stream))
        {
            string result = reader.ReadToEnd();
            return result;
        }
    }
    
    • und der Aufruf, inkl. zerlegen in strings;
    string[] daten = GetEmbeddedTxtFileContent().Split('\r');
    

    Leider erkennt der Compiler nicht wenn das txtFile aktualisiert wurde, hier hilft dann einmal neu erstellen.

    Thats all 😎



  • @Smitty sagte in Zugriff auf Textdatei in der Projektliste:

    Leider erkennt der Compiler nicht wenn das txtFile aktualisiert wurde

    Weil das "txtFile" zur Runtime ja auch garnicht gelesen wird sondern die Daten die als Ressource zur Compiletime in die .exe eingebettet wurden. Ich hoffe schön langsam fällt der Groschen.



  • @Smitty sagte in Zugriff auf Textdatei in der Projektliste:

    Ganz einfach:

    • die Textdatei in die Projektmappe aufnehmen, auf die Ebene der .cs Dateien
    • dann sowas hier:
      ...

    DANN ist die Textdatei ja auch da, nämlich in Deiner Anwendung! Allerdings statisch ...

    ... dann gibst Du Deine Anwendung weiter und aktualisierst zu Hause auf Deinem System die Textdatei.
    Und nun soll die weitergegebene Anwendung erkennen, dass bei Dir zu Hause die Textdatei aktualisiert wurde ...

    Und deshalb:

    Leider erkennt der Compiler nicht wenn das txtFile aktualisiert wurde, hier hilft dann einmal neu erstellen.

    Thats all 😎


Anmelden zum Antworten