Zum Inhalt springen

Programmabbruch nach Einbindung eines Servers


Empfohlene Beiträge

Geschrieben

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.

Geschrieben
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.

Geschrieben

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.

Geschrieben
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.
Geschrieben
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.

Geschrieben
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?

Geschrieben
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.....

Geschrieben
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?
Geschrieben

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.

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...