Hallo! Ich schreibe gerade ein kleines Tool, das Log-Daten erzeugen soll. Unter Windows ist die dafür notwendige Pfadangabe ja recht einfach: TextWriter tw = new StreamWriter(@"MeinLog.txt"); (So landet das Log direkt neben der exe) Wie sieht das nun unter Linux aus? Hier würde ich die Dateien gerne auf einem USB Stick ablegen, da es sich um einen Raspberry Pi handelt (die SD Karte soll nicht zu arg leiden). -> Wenn ich das Programm direkt vom USB Stick starte, legt dieses die Log Datei dann direkt "neben sich" (also auch auf dem Stick) ab? -> Wie komme ich überhaupt an den USB-Stick - Muss ich diesen erst "mounten"? (Plug and Play?) Danke!
kopfkratz GOOGLE schon wieder kaputt oder Angst die NSA lönnte mit den Infos bessere Trojaner bauen ? http://www.thegeekstuff.com/2012/07/c-file-handling/ Und ja es wird wenn kein expliziter Pfad angegeben wird . genommen ...
Du kannst entweder einen absoluten Pfad (zB. "/var/log/abc") angeben oder auch ein relativen (zB. "./abc")
Boris B. schrieb: > (So landet das Log direkt neben der exe) Genau das macht man unter unix nicht. Logfiles gehören nach "/var/log/<programmname>.log" für systemweite Programme, oder eben ins User-Homeverzeichnis (des Users, der das Program ausführt!), bzw ein Unterverzeichnis davon. user schrieb: > oder auch ein relativen (zB. "./abc") der ist aber Relativ zum aktuellen Arbeits-Verzeichnis, nicht relativ zum Installationsort des Programmes! d.H. bei > cd /tmp > /usr/local/bin/meinTollesProgramm würde das Logfile in /tmp/abc landen.
Boris B. schrieb: > TextWriter tw = new StreamWriter(@"MeinLog.txt"); > (So landet das Log direkt neben der exe) Hm, ich hätte gedacht, es landet in aktuellen Verzeichnis, so wie bei Linux auch. Meinst du nicht, dass du diesbezüglich einem Irrtum unterliegst?
Boris B. schrieb: > Hallo! > Ich schreibe gerade ein kleines Tool, das Log-Daten erzeugen soll. Unter > Windows ist die dafür notwendige Pfadangabe ja recht einfach: > > TextWriter tw = new StreamWriter(@"MeinLog.txt"); > (So landet das Log direkt neben der exe) Das wird dann nicht mehr funktionieren, wenn jemand dein Tool ins Windows Programme-Verzeichnis verschiebt. ;)
Boris B. schrieb: > TextWriter tw = new StreamWriter(@"MeinLog.txt"); > (So landet das Log direkt neben der exe) Nein, es landet dann im Working-Directory, was häufig identisch mit dem Programmverzeichnis ist, das kann aber zur Laufzeit z.B. durch OpenFileDialog geändert werden (oder auch schon beim Start abweichen) Besser wäre den Pfad zusammenzubauen: Application.StartupPath + "MeinLog.txt" Noch besser wäre einen geeigneten Ordner zu wählen: http://blogs.msdn.com/b/patricka/archive/2010/03/18/where-should-i-store-my-data-and-configuration-files-if-i-target-multiple-os-versions.aspx (an die Pfade kommt man via Environment.GetSpecialFolder())
g. c. schrieb: > Das wird dann nicht mehr funktionieren, wenn jemand dein Tool ins > Windows Programme-Verzeichnis verschiebt. Da gehört ein Programm ja auch nicht hin ;-) In meinem Fall soll das Programm übrigens portabel auf einem USB-Stick liegen, von dort aus gestartet werden und auch dort sein Log ablegen. Εrnst B✶ schrieb: > Genau das macht man unter unix nicht. > Logfiles gehören nach "/var/log/<programmname>.log" für systemweite > Programme, oder eben ins User-Homeverzeichnis (des Users, der das > Program ausführt!), bzw ein Unterverzeichnis davon. Das Programm soll aber Platform unabhängig sein. D.h. ich möchte es direkt vom USB Stick auf dem Mac, Linux und Windows starten können. bluppdidupp schrieb: > Nein, es landet dann im Working-Directory, was häufig identisch mit dem > Programmverzeichnis ist, das kann aber zur Laufzeit z.B. durch > OpenFileDialog geändert werden (oder auch schon beim Start abweichen) So ist es. In meinem Fall passt das aber, da sich das Working Directory nicht ändert.
Εrnst B✶ schrieb: >> (So landet das Log direkt neben der exe) > > Genau das macht man unter unix nicht. Aber tausende von Unix-Freaks erklären einem, dass das, was so unter Windows nicht mehr geht, gerade der grosse Vorteil von Unix/Linux wäre (alles in einem Verzeichnis). Εrnst B✶ schrieb: > Logfiles gehören nach "/var/log/<programmname>.log" Pfui Teufel das ist ja fast wie Windows. Gruss Reinhard
Wenn sichergestellt ist, dass das Programm immer unter einem freigegebenen Pfad herumhängt: Probiere es mal mit argv wenn Du dem Punkt-Verzeichnis nicht traust. Ist ja auch ein wenig zweideutig. Bei Verwendung eines USB-Sticks hast Du ja das Problem, dass bei jedem Rechner ein anderes Laufwerk zugewiesen wird. Ordentlich, unter Windoof, installiert (unter Programme), wiederum geht das dann in die Hose.
Reinhard Kern schrieb: >> Logfiles gehören nach "/var/log/<programmname>.log" > > Pfui Teufel das ist ja fast wie Windows. Nein, da fehlt der 2te Teil des Satzes: Εrnst B✶ schrieb: > für systemweite > Programme, oder eben ins User-Homeverzeichnis (des Users, der das > Program ausführt!), bzw ein Unterverzeichnis davon. Und damit ist es eben nicht so wie ... wendelsberg
Reinhard Kern schrieb: > Εrnst B✶ schrieb: >>> (So landet das Log direkt neben der exe) >> >> Genau das macht man unter unix nicht. > > Aber tausende von Unix-Freaks erklären einem, dass das, was so unter > Windows nicht mehr geht, gerade der grosse Vorteil von Unix/Linux wäre > (alles in einem Verzeichnis). Dann sind das vielleicht Freaks, aber Ahnung von Unix haben sie nicht. Unter Unix werden die Bereiche der ausführbaren Programme (meist unter /usr/bin), die Konfigurationsdateien (unter /etc) und eben auch die Log-Dateien (unter /var/log) üblicherweise strikt getrennt. Ich möchte eher nicht, dass in den Verzeichnissen, in denen Binaries liegen, wild herumgeschrieben werden darf. Diese sollten schon aus Sicherheitsgründen nur-lesbar und ausführbar zu sein. Aber es gibt andere, die bevorzugen alles in einem Verzeichnis. Beides hat Vor- und Nachteile. > Εrnst B✶ schrieb: >> Logfiles gehören nach "/var/log/<programmname>.log" > > Pfui Teufel das ist ja fast wie Windows. Das gab unter Unix es schon lange, bevor sich Bill überhaupt über den Namen seiner DLL-Sammlung Gedanken machte ;-)
Komisch, das bisher niemand einen sowohl in Linux als auch in Windows recht beliebten und sehr nützlichen Weg erwähnte, Logs zu schreiben: Die Einträge nicht direkt in ein eigenes File zu schreiben, sondern dem vorhandenen Logdienst zu übergeben. Damit löst sich die Frage nach Pfaden in Luft auf und es hat in Linux auch den Vorteil, dass der Admin der Büchse steuern kann, wo das letztlich wirklich landet, die Logs live automatisiert auswerten und auch über Netz anderswo deponieren kann.
:
Bearbeitet durch User
A. K. schrieb: > Komisch, das bisher niemand einen sowohl in Linux als auch in Windows > recht beliebten und sehr nützlichen Weg erwähnte, Logs zu schreiben: Die > Einträge nicht direkt in ein eigenes File zu schreiben, sondern dem > vorhandenen Logdienst zu übergeben. Oh, stimmt. Das hatte ich als bekannt vorausgesetzt - war wohl mal wieder zu weit voraus :-/ Solche Dinge übergibt man in der Tat den guten Geistern des Hauses (Dämonen) :-) > Damit löst sich die Frage nach Pfaden in Luft auf und es hat in Linux > auch den Vorteil, dass der Admin der Büchse steuern kann, wo das > letztlich wirklich landet, die Logs live automatisiert auswerten und > auch über Netz anderswo deponieren kann. So isses.
Alternativ: http://linux.die.net/man/3/getcwd Bsp: http://tuxthink.blogspot.co.at/2012/12/c-program-in-linux-to-find-current.html
Was für den TO hilfreich sein könnte: http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.