Datei im übergordneten Verzeichnis erstellen

Gast #2587070
Lesenswert?

Hallo zusammen,

ich möchte eine Datei erzeugen, die eine Ebene höher liegt wie meine 
Exe.

ich habe versucht, den Dateinamen für fopen
1
if((outstream=fopen(outfile,"w"))==NULL)
 wie folgt zu erweitern:


origial:
1
char *outfile="mytest.m";

neu:
1
char *outfile="..\mytest.m";
bzw.
1
char *outfile="..\\mytest.m";

beides funktioniert nicht. Die Ausgabe landet immer im selben 
Verzeichnis wie meine exe.
Am Ende möchte ich die Konsolenanwendung gerne per Argument mit einem 
relativen Ausgabepfad füttern.


Ich hoffe es kann jemand helfen.

Ich arbeite mit ms visual studio express 2010.

Grüße Michael
Gast #2587238
Lesenswert?

Joachim Drechsel schrieb:
> Dann habe ich ein chinesisch gefälschtes Windows ;-)))

Ja, das ist offensichtlich so. Du kannst z.B. bei jedem Link unter 
Eigenschaften einstellen "Ausführen in", d.h. du kannst zum 
Programmstart jedes beliebige Verzeichnis zum aktuellen machen. Aber das 
ist nur eine Möglichkeit von vielen, ein Arbeitsverzeichnis einzustellen 
- eine Beschäftigung mit BS-Grundlagen, Dateisystemen, 
Umgebungsvariablen und noch ein paar Erstsemesterfragen wäre wohl nicht 
verkehrt, bevor man die armen Chinesen beschuldigt.

Nach deiner Behauptung müsste der Windows-Explorer immer im 
Windows-Verzeichnis starten, weil dort die explorer.exe steht, das wäre 
aber sehr unpraktisch.

Gruss Reinhard
#2590020
Lesenswert?

Michael schrieb:
> Vielen Dank.
> Wenn ich die exe ausserhalb der Debug Umgebung ausführe,
> klappt es ohne Probleme.- Danke für das Beispiel.
> Hatte evtl. was mit Zugriffsrechten zu tun.

Eher damit, dass du in der Entwicklungsumgebung ein anderes Working 
Directory hast. In Visual C++ ist es zb so

+  Projektverzeichnis
  +  Debugverzeichnis

Das EXE steht am Debugverzeichnis. Wenn der Debugger aber startet ist 
normalerweise das Projektverzeichnis das Working Directory.
Gast #2590142
Lesenswert?

GetModuleFileName() + PathRemoveFileSpec() ergibt den Ordner, in dem die 
.exe liegt. Davon ausgehend könnte man sich den absoluten Pfad zum 
übergeordneten Ordner zusammenbauen.

Das "Current Directory" (bzw "Working Directory") sollte MS mal 
abschaffen ;D (oder dessen Auswirkungen nur auf OpenFileDialog, etc. 
beschränken)
#2590153
Lesenswert?

bluppdidupp schrieb:
> Das "Current Directory" (bzw "Working Directory") sollte MS mal
> abschaffen ;D (oder dessen Auswirkungen nur auf OpenFileDialog, etc.
> beschränken)

Na ja, es hat aber keiner seine Arbeitsdateien in das Verzeichnis zu 
legen in dem eine installierte Anwendung liegt oder gar in dem 
darüberliegenden Verzeichnis. Das widerspricht jeglichem 
Sicherkeitsaspekt und der Trennung von Programm und User-Daten auf einem 
Multi-User System.
Und genau das sind Windows und Unix Systeme.
Er kann seine Daten ja in sein home Verzeichnis schreiben.
Man könnte sich für so was auch eine Umgebungsvariable setzen und für 
den Fall dass sie nicht gesetzt ist mit einer sprechenden Fehlermeldung 
abbrechen.
Gast #2590185
Lesenswert?

Udo Schmitt schrieb:
> Na ja, es hat aber keiner seine Arbeitsdateien in das Verzeichnis zu
> legen in dem eine installierte Anwendung liegt oder gar in dem
> darüberliegenden Verzeichnis

Das stimmt, aber ich sehe da nur 2 verschiedene Varianten:
1) Daten die meine Anwendung intern verwendet (Datenbankdateien, etc.), 
die lege ich unter FOLDERID_LocalAppData, FOLDERID_RoamingAppData, ... 
ab.
2) Dateien die der Benutzer selbst via "Datei öffnen"-Dialog, etc. 
auswählt.

In Fall 1) bringt mir das Working-Directory nichts.
In Fall 2) bringt das Working-Directory der Anwendung selbst nicht 
wirklich was, sondern eher dem Datei-Öffnen-Dialog von Windows. Ich als 
Anwendung kriege ohnehin den absoluten Pfad der ausgewählten Datei(en) 
von der Dialog-Box.

Genau genommen baue ich Pfade aktuell auch nur zusammen um read-only auf 
Grafiken im Programmordner zuzugreifen ;D

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren