Datei kann nicht geöffnet werden wenn das Programm von einem anderen Programm geöffnet wird
-
Hallo zusammen,
das Programm, das ich geschrieben habe (dank Eurer Hilfe)
funktioniert eigentlich gut. Wenn ich das Programm in der Eingabeaufforderung mit den gewünschten Parameter starte, funktioniert es einwandfrei.
Will ich es jedoch aus einem anderen Programm starten (WinCCflex), kann mein Programm die Datei die es öffnen sollte nicht mehr öffnen, obwohl es die Parameter richtig übernimmt.Habe schon beim Support von WinCCflex geschaut, aber anscheinend muss es ein Programmierfehler von mir sein.
Habe es schon mit diversen Systembefehlen probiert, hat alles nichts gebracht.
Wenn ich den kompletten Pfad von "visu.dat" eingebe beim Dateiaufruf, funktioniert es auch nicht.Wenn ich es über eine *.bat datei starte, funktioniert es.
Habt Ihr noch eine Idee oder Tipps?
Danke für Eure HilfeMetas
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) //Parameter einlesen { if (argc <= 1) { printf("zu wenige Parameter\n"); system("pause"); exit(1); } if (argc >= 3) {printf("zu viele Parameter\n"); system("pause"); exit(1); } if (argc == 2) {printf("Parameter korrekt geladen"); } printf("\nParameter %s wird geladen\n",argv[1]); FILE *datei; datei = fopen("visu.dat", "r"); if(datei != NULL) { printf("\nDatei geöffnet\n"); while (fgets(buffer,999,datei)) //Zeile in buffer laden { if (strstr (buffer,argv[1])) //buffer nach parameter { printf("%s",buffer); //wenn gefunden, dann ausgeben fgets(dateivar,999,datei); printf("%s",dateivar); } else fgets(buffer,999,datei); } fclose(datei); printf("\nDatei geschlossen\n"); }
-
Schon mal errno ausgewertet oder perror() aufgerufen?
Dann kannst du erfahren warum du die Datei nicht öffnen konntest.Irgendwelche Leerzeichen im Pfad?
Kannst du deine Ausgaben von printf denn sehen?
-
Gib mal in deinem Programm die Rückgabe von getenv() und _getcwd() aus windows.h (ich glaube, da war ein Unterstrich) aus.
-
Wenn das Programm gestartet wird kommt folgendes:
Parameter korrekt geladen
Parameter 30.858 wird geladenDann überspringt es den Teil mit dem Datei öffnen und fährt nach dem "Datei geschlossen" fort.
Die Pfade habe ich schon ein paar mal kontrolliert und immer wieder neu geschrieben, daran sollte es auch nicht liegen.
probiere es mal mit errno/perror().
Danke für den Tipp.
-
Das kann daran liegen, dass beim alternativen Start das aktuelle Arbeitsverzeichnis nicht das ist, in welchem "visu.dat" liegt und somit die Datei von fopen nicht gefunden wird. Versuche mit kompletten Pfaden zu arbeiten oder zumindest mit relativen.
-
@Wutz: Hab ich doch schon mit _getcwd() vorgeschlagen.
EDIT: Sorry, nicht genug gelesen.
-
Metas schrieb:
Wenn ich den kompletten Pfad von "visu.dat" eingebe beim Dateiaufruf, funktioniert es auch nicht.
Scheint so, klingt aber auch genau nach diesem Problem. Mal wild geraten: Backslashes in String-Literalen müssen als Escape-Sequenz angegeben werden, beispielweise
FILE *fd = fopen("C:\\foo\\bar\\visu.dat", "r");
Alternativ kann man in UNIX-Manier / statt \ benutzen:
FILE *fd = fopen("C:/foo/bar/visu.dat", "r");
-
Hallo zusammen,
Danke für die vielen Lösungsvorschläge.
Tatsächlich war das Problem:Backslashes in String-Literalen müssen als Escape-Sequenz angegeben werden,
beispielweise:FILE *fd = fopen("C:\\foo\\bar\\visu.dat", "r");
@seldon Gut geraten!
Danke nochmals an alle. Ihr seid Gold wert.
Metas
-
Welchen Compiler benutzt du denn? Der GCC warnt sofort mit 'unknown escape sequence \C' oder so ähnlich. (natürlich nur, wenn deine Ordner nicht alle mit n, r, t, b oder so etwas anfangen
)
-
Benutze momemtan den Dev-C++, danke für den Tipp.
-
Dev-C++ ist veraltet, siehe mindestens 100 Threads in den letzten 3 Wochen.