Properties.Resources.[DateiName] wie erhalte ich den Pfad

  • C#
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Properties.Resources.[DateiName] wie erhalte ich den Pfad

    Hallo,
    für mein aktuelles Projekt benötige ich den Pfad einer Datei (eine csv Datei) die in den Resources liegt. Nun weiß ich leider nicht wie ich daran komme...
    Bisher habe schon folgendes probiert:
    Hiermit bekam ich leider nur den Inhalt der Datei angezeigt

    C#-Quellcode

    1. string Pfad = Properties.Resources.Highscore_Liste;​

    Hier hat VS gemeckert das es .Save nicht gibt.

    C#-Quellcode

    1. ​var path = Path.GetTempPath();
    2. Properties.Resources.Highscore_Liste.Save(path);

    Das ändern der .NET Framework Version hat auch nicht geholfen um VS zu überreden das es .Save gibt...

    Nun brauche ich wie gesagt den Pfad der Datei um den dann hier:

    C#-Quellcode

    1. ​FileInfo csvDateiInfo = new FileInfo(/*Pfad der Datei*/);

    einfügen zu können.
    Ich hoffe ihr könnt mir helfen.
    Mfg
    Bill Gates sagte 2004:

    "Spam wird in zwei Jahren der Vergangenheit angehören." :D

    Ignoriervorgang eingeleitet: 90%


    Meine aktuellen Projekte:
    @kingaaron98 Die Properties sind sozusagen globale Variablen.
    Dein Pfad ist ein String. Also behandle ihn auch so.

    C#-Quellcode

    1. var path = Path.GetTempPath();
    2. Properties.Resources.Highscore_Liste = path;
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab das folgendermaßen gemacht

    C#-Quellcode

    1. ​var path = Path.GetTempPath(); //oder auch mit string
    2. path = Properties.Resources.Highscore_Liste;

    Funktioniert trotzdem nicht. Wahrscheinlich ist auch total einfach, nur komme ich da einfach nicht drauf
    Bill Gates sagte 2004:

    "Spam wird in zwei Jahren der Vergangenheit angehören." :D

    Ignoriervorgang eingeleitet: 90%


    Meine aktuellen Projekte:

    kingaaron98 schrieb:

    benötige ich den Pfad einer Datei (eine csv Datei) die in den Resources liegt.
    Eine Datei kann doch garnet in den Resourcen liegen.
    Resourcen sind doch .resx - Dateien, und da wird allerlei hinein-kompiliert(?), vielleicht auch der Inhalt einer csv-Datei.
    Aber ein Datei-Inhalt ist keine Datei.

    Aber vlt. irre ich mich, das wäre fein, dann lerne ich demnächst was dazu, evtl. :)
    Du hast das Beispiel von @RodFromGermany ganz offensichtlich nicht verstanden, lerne bitte den Debug Modus zu benutzen und setze Haltepunkte.
    Dateien, die Du in den Ressourcen ablegst, musst Du erst einmal im Filesystem abspeichern, dazu verwendest Du die Methoden File.WriteAllBytes oder File.WriteAllText (je nach dem was für eine Datei es ist).
    Um die Pfade musst Du dich selbst kümmern, also festlegen. Ich mach das gerne wie folgt:

    C#-Quellcode

    1. string MyAppDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MeinProgrammFolder");
    2. string MySettings = Path.Combine(MyAppDataPath, "MySetting.xml");
    3. File.WriteAllBytes(MySettings, Properties.Resources.MySettingFile);

    Das ist natürlich sehr verkürzt, hier wird z.B. die Datei falls vorhanden ungefragt überschrieben.

    Was Du da oben versuchst, so scheint mir, den Pfad der in der Ressource abgespeicherten Datei abzufragen. Das kann nicht funktionieren, denn sie ist ja in deinem Programm eingebettet.
    @kingaaron98
    Fileinfo unterstützt mit .FullName eine vollständige Pfadangabe

    für die Darstellung des vollständigen Pfades von dateien in einer listbox funktioniert das so:

    VB.NET-Quellcode

    1. Dim di As New IO.DirectoryInfo("D:\Dein Ordner irgendwas")
    2. Dim diar1 As IO.FileInfo() = di.GetFiles("*.JPG", SearchOption.AllDirectories)
    3. Dim dra As IO.FileInfo
    4. ListBox1.BeginUpdate()
    5. For Each dra In diar1
    6. ListBox1.Items.Add(dra.FullName)
    7. Next
    8. ListBox1.EndUpdate()

    kingaaron98 schrieb:

    Funktioniert trotzdem nicht.
    Mach mal ne Skizze, was Du überhaupt willst und erkläre das ganz genau.
    Darin enthalten sollten sein:
    • Variablen und Settings zum Halten von Dateinamen
    • Daten in den Dateien dieser Dateinamen, falls die relevant sind.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hatte leider in den letzten tage nicht so viel zeit. Also ich will das folgendermaßen machen.
    1. Der Nutzer spielt solange bis er das erste mal verliert. Bei jedem Gewinn wird ​eine integer variable immer um eins erhöht.
    2. Wenn der Nutzer dann irgendwann verliert wird zusammen mit einem Namen, dem aktuellen Datum und dem Counter dann diese drei Werte in die .csv datei am ende angefügt. Die Datei befindet sich in dem Properties.Resources.Highscore "Ordner". Jedoch brauche ich genau davon den Pfad. Anschließend wird der Counter wieder auf 0 gesetzt.
    Eine aktuelle Funktionsfähige Lösung ist die ich zurzeit habe ist folgende.
    die Highscore liste befindet sich in dem Start Pfad der Anwendung und hört auf den Namen Highscore.csv.
    Beim Programmstart wird dann überprüft ob die Datei existiert oder nicht. Falls diese nicht existiert (z.b vergessen mit zu kopieren) wird dann eine neue Datei erstellt und dort dann "Nr;Punkte;Name;Datum" reingeschrieben. Diese variante mag ich jedoch nicht so gerne, da ich noch plane für jedes Spiel eine eigene Highscore liste zu machen. Was ich mir jedoch vorstellen könnte wäre das ich die Listen dann im AppData ordner speichere und dann immer von dort aufrufe...
    Bill Gates sagte 2004:

    "Spam wird in zwei Jahren der Vergangenheit angehören." :D

    Ignoriervorgang eingeleitet: 90%


    Meine aktuellen Projekte:
    @kingaaron98 Lege eine Setting-Variable des Typs an, den Du benötigst.
    Weise dieser Variable den zu speichernden Wert zu.
    Speichere die Settings (bei VB passiert das per default).
    Lade die Settings bei Programmstart.
    Verwende die Variable.
    Feddich.
    Das Laden und Speichern kannst Du in Programm.cs machen:

    C#-Quellcode

    1. static void Main()
    2. {
    3. Application.EnableVisualStyles();
    4. Application.SetCompatibleTextRenderingDefault(false);
    5. global::MyProjectProperties.Settings.Default.Reload();
    6. Application.Run(new GUI.MainForm());
    7. global::MyProjectProperties.Settings.Default.Save();
    8. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!