Fufialk Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Hallo, ich habe folgendes Problem. Ich habe ein programm geschrieben, daß Messdaten verwaltet. Alle Tests auf meinem Rechner waren erfolgreich, und die daten wurden Lokal gespeichert. Nun sollen die daten aber auf einem Server gespeichert, und somit allen Mitarbeitern verfügbar gfemacht werden. Ich besitze alle Schreib und Leserechte dort, jedoch bricht das Programm immer an der selben Stelle ab. Ich habe den Sever mit einem festen Laufwerksbuchstaben bei mir eingebunden, und die ersten Zugriffe funktionieren auch ohne Probleme. Hier mal auszüge aus dem Code: void spf_dat(const char *spf_daten) { int groesse; long zeit; char filewrite[NAME_LENGTH]; //Name & Pfad der Ausgabedatei char fwrite[12]; //Dateiname der Eingabedatei (Datum.Dateierweiterung) short block2, block3; // Kontrollvariablen für Blockvertauschung unsigned short blockerror = 0; // Zähler für Anzahl der vertauschten Blöcke double errorrate; //Fehlerrate in Prozent char Jahr[4]; char Woche[5]; char path[] = "T:\\Messdaten\\SPF"; //T:\\ ist das Netzlaufwerk char ext[] = "Extern"; cout << "\nFolgende Datei wird verarbeitet : " << spf_daten; // Berechnung der Größe des Datenfiles struct stat buf; stat(spf_daten, &buf); groesse = buf.st_size; // Auslesen des Datums aus dem Datenfile const char* find = strrchr(spf_daten, '\\'); //letztes "\" finden strncpy(fwrite,find+1, 8); //alles ab "\" kopieren und "filewrite zuweisen zeit = strtol(fwrite,0, 16); zeit = zeit -86400; //Bereinigung Fehler Datum time_t timer; struct tm *tblock; tblock = localtime(&zeit); //Erstellen der Ordner für Jahr und Kalenderwoche chdir(path); sprintf(Jahr,"%4d",tblock->tm_year+1900); chdir(Jahr); sprintf(Woche,"KW_%02d",tblock->tm_yday/7+1); chdir(Woche); mkdir(ext); chdir(Woche); // Zuweisung der Dateinamen für die zu schreibenden Files sprintf(filewrite,"SPF_%02d%02d%04d.txt",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); ofstream ofl1(filewrite, ios::out|ios::trunc); // öffnen der Ausgabedatei // schreiben der Kopfzeile des Datenfiles ofl1 << setfill(' ') << setw(20) << "BlockNum."; // Blocknummer ofl1 << setfill(' ') << setw(20) << "Anz.Werte"; // Anzahl der Werte im Block ofl1 << setfill(' ') << setw(20) << "Zeit"; // Zeitstempel des Blockes ofl1 << setfill(' ') << setw(20) << "V_G"; // 1. Wert Volumenstrom Generator ofl1 << endl; ofl1.close(); //Schliessen des Datenfiles int i; //Index für Schleifendurchläufe int z = 0; //Zähler für Messwerte int timeerror = 0; //Zähler für Falsche Zeitstempel cout << "\nDie Umwandlung erfolgt, bitte warten\n"; ifstream ifl(spf_daten, ios::in|ios::binary); //Öffnen der Messdatendatei do //[B][COLOR="red"]Hier bricht das Programm ab[/COLOR][/B] { for (i = 0; i < MAX_DURCHLAUF; i++) { //Einlesen der Messdaten und Zuweisung in eine Struktur... ofstream ofl3(filewrite, ios::out|ios::app);// öffnen der Ausgabedatei ofl3.setf(ios::fixed);// schreiben des Datenfiles ofl3 << setfill(' ') << setw(20) << daten[i].block_num_1; // Blocknummer ofl3 << endl; ofl3.close(); } //for } //do while (Prozent <= 100); ifl.close(); [/PHP] Wie gesagt, Lokal läuft alles bestens. Erst seit Änderung des Lufwerkbuchstabens gibt es Probleme. Zitieren
Klotzkopp Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 jedoch bricht das Programm immer an der selben Stelle ab.Wie genau bricht es denn ab, also mit welcher Meldung? Mir fällt auf, dass die Arrays Jahr und Woche zu klein sind, vielleicht auch filewrite, das hängt davon ab, was NAME_LENGTH ist. Vielleicht solltest mal allgemein prüfen, ob nicht auch noch an anderen Stellen über Arraygrenzen hinaus zugreifst. Zitieren
Fufialk Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 Warum sind die Arrays zu klein? Das Jahr weise ich ja mit vier Stellen zu, also 2008 und Woche mit 5 Stellen (KW_01) etc. NAME_LENGTH ist mit 128 ausreichen groß deklariert. Das Programm beendet sich ganz normal ohne Fehlermeldung. Es erweckt den Anschein, als ob es gar nicht in die do - while Schleife springt. Zitieren
Unrealfighter Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 dann probier es doch mal mit einem Debugger wo sich das Probleme aufhängt bzw was es überhaupt tut. Zitieren
Klotzkopp Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Warum sind die Arrays zu klein? Das Jahr weise ich ja mit vier Stellen zu, also 2008 und Woche mit 5 Stellen (KW_01) etc. Und praktisch jede Stringfunktion aus C - also z.B. auch sprintf - hängt eine Stringende-Markierung an ('\0'), die dann im Speicher hinter deinen Arrays landet -> Undefiniertes Verhalten. Das Programm beendet sich ganz normal ohne Fehlermeldung. Es erweckt den Anschein, als ob es gar nicht in die do - while Schleife springt.Die Schleife wird zumindest einmal ausgeführt. Prüf es doch mal mit dem Debugger. Da du in der Schleifenbedingung eine Variable benutzt (Prozent), die sonst nirgendwo im gezeigten Code auftaucht, können wir dir da kaum weiterhelfen. Mich wundert, dass das überhaupt mal funktioniert hat, da Prozent ja nirgends geändert wird. Zitieren
Fufialk Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 Und praktisch jede Stringfunktion aus C - also z.B. auch sprintf - hängt eine Stringende-Markierung an ('\0'), die dann im Speicher hinter deinen Arrays landet -> Undefiniertes Verhalten. Also sollte ich die Arrays alle eine Stelle größer machen? Die Schleife wird zumindest einmal ausgeführt. Prüf es doch mal mit dem Debugger. Da du in der Schleifenbedingung eine Variable benutzt (Prozent), die sonst nirgendwo im gezeigten Code auftaucht, können wir dir da kaum weiterhelfen. Mich wundert, dass das überhaupt mal funktioniert hat, da Prozent ja nirgends geändert wird. Das habe ich beim Posten weggelassen, da es nach meiner Ansicht nichts mit dem Fehler zu tun hat. Prozent wird über cout als Fortschrittsanzeige benutzt. Zitieren
Klotzkopp Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Also sollte ich die Arrays alle eine Stelle größer machen?Ja, es wäre schon ganz gut, wenn das, was du reinschreibst, auch reinpasst. Das habe ich beim Posten weggelassen, da es nach meiner Ansicht nichts mit dem Fehler zu tun hat.Wenn du nicht den richtigen Code zeigst, können wir uns die Fehlersuche gleich sparen. Ohne dir zu nahe treten zu wollen: Wenn du in der Lage wärest, zu beurteilen, welcher Teil des Codes mit dem Fehler zu tun hat, hättest du dein aktuelles Problem nicht. Was sagt denn jetzt der Debugger? Zitieren
Fufialk Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 Ja, es wäre schon ganz gut, wenn das, was du reinschreibst, auch reinpasst. Also char Jahr =[5] usw.? Was sagt denn jetzt der Debugger? Da liegt mein zweites Problem, bisher habe ich ohne Debugger gearbeitet. Ich muss mich da also erst einmal einlesen. Welchen ich verwende, und was die Anzeigen überhaupt bedeuten..... Zitieren
Klotzkopp Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Also char Jahr =[5] usw.?Genau. Das Array muss immer um 1 länger sein, als der Text, der drinstehen soll. Da liegt mein zweites Problem, bisher habe ich ohne Debugger gearbeitet. Ich muss mich da also erst einmal einlesen. Welchen ich verwende, und was die Anzeigen überhaupt bedeuten.....Zunächst solltest du einfach in Einzelschritten durch dein Programm laufen, damit du siehst, wo es überhaupt aussteigt. Welche Entwicklungsumgebung bzw. welchen Compiler benutzt du denn? Zitieren
Fufialk Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 Ist der Borland C++ 5.5.1 mit dem SciTe Textedito als Oberfläche. Wie gesagt, wie ich den Debugger hier einsetze muß ich erst noch rausfinden. Und vor allem welchen, da das Programm ja über D&D gestartet wird. Zitieren
Klotzkopp Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 Du kannst dein Programm auch mit Diagnosemeldungen zupflastern, so dass du am Ende an der Ausgabe nachvollziehen kannst, was passiert ist. Zitieren
Fufialk Geschrieben 6. Februar 2008 Autor Geschrieben 6. Februar 2008 So was ähnliches habe ich schon gemacht. Daher weiß ich, an welcher Stelle es hakt. Worauf muss ich denn im Debugger achten? Zitieren
Klotzkopp Geschrieben 6. Februar 2008 Geschrieben 6. Februar 2008 So was ähnliches habe ich schon gemacht. Daher weiß ich, an welcher Stelle es hakt.Es wäre toll gewesen, wenn du uns das auch verraten hättest. Bisher hast du immer nur davon gesprochen, dass ein "Anschein erweckt" wird. Worauf muss ich denn im Debugger achten?Wenn du schon weißt, wo das Programm aussteigt, dann konzentriere ich darauf, warum es an dieser Stelle aussteigt. Schau dir die Werte der Variablen an. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.