Zugriff auf Textdatei in der Projektliste
-
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
-
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