Archiv verlassen und diese Seite im Standarddesign anzeigen : Array in Datei schreiben ???
backebackekuchen
04.09.2003, 11:37
Hi Leuts
Ich brauch mal wieder einen Stein des Anstosses.
Wie kann man ein Integer Array mittels "WriteFile"
in eine Datei schreiben. Jeder Versuch endete mit
Datenmüll im File.
Ein Codeschnipsel wäre Klasse.(C,C++,WinApi)
Lars alias backebackekuchen
WriteFile(Dateihandle, &Array, AnzahlzuSchreiben, Anzahlgeschrieben, Pointer_zu_OverlappedStruct);
backebackekuchen
04.09.2003, 11:54
Hier mal der Code. Läuft so nicht.
case IDOK :
hFile = CreateFile("Fehler.txt",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
HWND hEdit;
DWORD dwWritten;
int Fehler[20];
for(z=0;z<=19;z++)
{
Fehler[z] = GetDlgItemInt(hDlg,2000+z,0,0);
SetDlgItemInt(hDlg,3000+z,Fehler[z],0);
hEdit = GetDlgItem(hDlg, 2000+z);
WriteFile(hFile, &Fehler, GetWindowTextLength(hEdit), &dwWritten, NULL);
}
Du solltest das Array nach der Schleife speichern, nicht in ihr.
wo Scavi recht hat hat er recht!
const int COUNT = 20;
int Fehler[COUNT];
for(z=0;z<=19;z++)
{
Fehler[z] = GetDlgItemInt(hDlg,2000+z,0,0);
SetDlgItemInt(hDlg,3000+z,Fehler[z],0);
hEdit = GetDlgItem(hDlg, 2000+z);
}
WriteFile(hFile, Fehler, COUNT * sizeof (int), &dwWritten, NULL);
WriteFile(hFile, Fehler, COUNT * sizeof (int), &dwWritten, NULL);
eher: &Fehler[0]
backebackekuchen
04.09.2003, 15:04
Mal zum Verständnis für mich.
Schreibt WriteFile ein komplettes Array in eine Datei?
Oder ist es nicht so wie von mir gedacht, daß jeder
einzelne der 20 Werte (INterger) durch eine
Schleife geschrieben werden muß?
Lars alias backebackekuchen
Nein, es schreibt das komplette Array ! Ansonsten würde es ja nur ein Zeichen schreiben.
backebackekuchen
04.09.2003, 15:13
Juhu das wars.
Das war der Stein des Anstosses.
Vielen Dank
Lars alias backebackekuchen
@Scavi
&Fehler[0] ist mit Fehler identisch
ob du vom 1. Index den Pointer uebergibst oder den Pointer des feldes das ist da gleiche versuch mal das
if (&Fehler[0] == Fehler)
// xOOn hat recht
else
// Scavi hat recht
:P
backebackekuchen
05.09.2003, 09:26
Hab nun nahezu alles alles ausprobiert. Die Funktion
"WriteFile" scheint sich daran zu stören, daß ich Integerwerte
schreiben will. Sie erwartet Pointer auf ein String.Sobald ich mit
TCHAR arbeite und Speicher allociere ist alles kein Problem.
Zu guterletzt hab ich mich der alten guten "fprintf" besonnen.
Und siehe da - keine 5 min - alles lief wie geschmiert.
Daher mein neues Motto für dieses Projekt
"Back to the roots"
Lars alias backebackekuchen
Der Funktion WriteFile ist es egal, was für Daten du schreibst, sie schreibt einfach. Vielleicht willst du gar nicht das Array schreiben sondern die Arrayinhalte als ASCII? Dann ist es kein Wunder dass es mit WriteFile nicht geht. :)
backebackekuchen
06.09.2003, 09:48
Das ist richtig. Aber wo liegt da der Unterschied?
In meinen Büchern steht nicht viel zu WriteFile.
Im Netz war auch nicht viel zu finden.
Lars alias backebackekuchen
WriteFile (oder fwrite) schreibt einfach das was du angibst so wie es ist in die Datei. Mit fprintf kann man z. B. Integer in ASCII umwandeln, sodass man es dann mit einem Texteditor lesen kann.
Hier mal in C:
case IDOK:
{
___FILE *fp;
___int Fehler[20];
___HWND hEdit;
___if( (fp=fopen("Fehler.txt", "w")) != NULL )
___{
______for(z=0;z<=19;z++)
______{
_________Fehler[z] = GetDlgItemInt(hDlg,2000+z,0,0);
_________SetDlgItemInt(hDlg,3000+z,Fehler[z],0);
_________hEdit = GetDlgItem(hDlg, 2000+z);
_________fprintf( fp, "Fehler[%d]: %d \n", z, Fehler[z] );
______}
______fclose(fp);
___}
___else
______//Dateifehler
___//...
}
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.