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!
Gast
#3441272
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 ...
Gast
#3441284
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. ;)
Gast
#3441381
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.
Gast
#3442033
Ε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
Gast
#3442059
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.
Gast
#3442072
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.
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.
Gast
#3442177
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.