Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

fread problem mit struct und Binärdatei

Frage Entwicklung C und C++

Mitglied: wuschel-cOre

wuschel-cOre (Level 1) - Jetzt verbinden

03.05.2009, aktualisiert 23:48 Uhr, 5785 Aufrufe, 24 Kommentare

Hi!!
01.
 
02.
struct Datum 
03.
04.
	int tt; 
05.
	int mm; 
06.
	int jj; 
07.
}; 
08.
 
09.
struct Person 
10.
11.
	int pnr; //nr der Person 
12.
	char name[30]; 
13.
	float gehalt; 
14.
	Datum gebdat; 
15.
};struct Person pers; 
16.
 
17.
 
18.
void delpers(); 
19.
void searchpers(int); 
20.
void getpers(); 
21.
void updpers(); 
22.
int main () 
23.
24.
/************Ausgabe Umlaute********/ 
25.
  char ue[] = "ü"; 
26.
  char oe[] = "ö"; 
27.
  char ae[] = "ä"; 
28.
  CharToOem(ue,ue); 
29.
  CharToOem(oe,oe); 
30.
  CharToOem(ae,ae); 
31.
/*************************************/ 
32.
  int aus,wid=1; 
33.
 
34.
 do 
35.
 {  
36.
  system("cls"); 
37.
  printf (" ------------- Bitte den Men%spunkt eingeben ! -----------------\n",ue); 
38.
  printf ("|                                                              |\n"); 
39.
  printf ("| 1.	Eingabe einer neuen Person                             |\n"); 
40.
  printf ("| 2.	W%shlen (pnr) und Ausgeben einer Person                 |\n",ae); 
41.
  printf ("| 3.	W%shlen (pnr) und L%sschen einer Person                  |\n",ae,oe); 
42.
  printf ("| 4.	W%shlen (pnr) und Update einer Person                   |\n",ae); 
43.
  printf ("| 5.	Personen sortiert nach Namen ausgeben                  |\n"); 
44.
  printf ("| 6.	Personen sortiert nach Geburtsdatum ausgeben           |\n"); 
45.
  printf ("| 7.	Personen sortiert nach Name und Geburtsdatum ausgeben  |\n"); 
46.
  printf ("| 8.	Reorganisation                                         |\n"); 
47.
  printf ("|                                                              |\n"); 
48.
  printf (" --------------------------------------------------------------\n\n",ue); 
49.
   
50.
  printf ("                    >>> "); scanf("%i",&aus); 
51.
  system ("cls"); //Clear Screen 
52.
    switch(aus) 
53.
54.
      case 0: 
55.
      wid==0; 
56.
      break; 
57.
      case 1: 
58.
      getpers(); 
59.
      break; 
60.
      case 2: 
61.
      printf ("Gib Nummer der Person ein die du ausgeben willst : - "); 
62.
      scanf ("%i",&pnr); 
63.
   **   searchpers();  ** 
64.
      break; 
65.
      case 3: 
66.
      printf ("Gib Nummer der Person ein die du l%sschen willst : - ",oe); 
67.
      scanf ("%i",&pers.pnr); 
68.
      delpers(); 
69.
      break; 
70.
      case 4: 
71.
      printf ("Gib Nummer der Person ein die du updaten willst : - ",oe); 
72.
      scanf ("%i",&pers.pnr); 
73.
      updpers(); 
74.
      break; 
75.
      case 5: 
76.
      break; 
77.
      case 6: 
78.
      break; 
79.
      case 7: 
80.
      break; 
81.
      case 8: 
82.
      break; 
83.
      default: 
84.
      printf ("                         // Falsche Eingabe //\n\n"); 
85.
      break; 
86.
87.
 }while(wid==1); 
88.
 system("PAUSE"); 
89.
 return 0; 
90.
91.
 
92.
 
93.
 
94.
 
95.
// Aufruf der Fuktion ....... Suchen einer Person, die in die Binärdatei gespeichert wurde 
96.
 
97.
void getpers() 
98.
99.
  fp= fopen ("pers.txt","a+b"); 
100.
  printf ("-- Bitte Daten der Person Eingeben --\n\n"); 
101.
  printf ("1. Nr = "); scanf ("%i",&pers.pnr); 
102.
  printf ("2. Name = "); scanf ("%s",&pers.name); 
103.
  printf ("1. Gehalt = "); scanf ("%f",&pers.gehalt); 
104.
  printf ("1. tt.mm.jj = "); scanf ("%i.%i.%i",&pers.gebdat.tt,&pers.gebdat.mm,&pers.gebdat.jj); 
105.
      
106.
  fwrite (&pers,sizeof(pers),1,fp);  //Hier wird in die Binärdateigeschrieben also die geraden eingegebene Werte. 
107.
  fclose (fp);      
108.
109.
 
110.
**void searchpers(int pnr) 
111.
112.
fp= fopen ("pers.bin", "r+b");             //Die Datei Binär öffnen 
113.
fseek(fp, 0L, SEEK_SET);             //Datei pointer zeigt danach auf den Anfang 
114.
 
115.
 if(fp==NULL) 
116.
 printf ("\nDatei wurde nicht gefunden!\n\n"); 
117.
  
118.
    do 
119.
120.
    fread (&pers, sizeof(pers),1,fp);               //////////////////////////////////// Genau hier stürzt er immer ab aber warum? 
121.
    }while(pnr!=pers.pnr);         // Also er macht die Schleife so lange bis pnr (das gesuchte) gleich dem pnr im 
122.
 
123.
    //gerade eingelsen struct aus der Textdatei ist 
124.
 
125.
    //Wenn gefunden 
126.
    printf ("\n\n    -- Die gesuchte Person - Pnr: %s - ist: --\n\n",pers.pnr);  
127.
    printf ("    1. Name = %s\n",pers.name); 
128.
    printf ("    2. Gehalt = %f\n",pers.gehalt); 
129.
    printf ("    3. tt.mm.jj = %i.%i.%i\n\n",pers.gebdat.tt,pers.gebdat.mm,pers.gebdat.jj); 
130.
     
131.
     
132.
    fclose(fp); //Schließen der Datei 
133.
printf ("\n\n\n"); 
134.
system ("PAUSE"); 
135.
}**

So Der fehler ist im Code markiert. fwrite also in die Binärdatei schreiben funktioniert einwandfrei.
aber fread wieder auslesen aus der Binärdatei funktioniert rein gar nicht. Also wenn ich die Zeile
mit dem fread weglassen würde das Programm funktionieren...
Mfg
Mitglied: maretz
03.05.2009 um 15:41 Uhr
ganz toll - du hast nen Programm geschrieben. Herzlichen Glückwunsch!

Ansonsten wäre eine Frage hilfreich...
Bitte warten ..
Mitglied: H41mSh1C0R
03.05.2009 um 15:52 Uhr
Augen auf, dann siehste das er unten ein Kommentar im Code zu stehen hat, wo steht:

" ;//////////////////////////// Genau hier stürzt er immer ab aber warum?"

Auch wenn das nicht so die feine Art ist tuen sich trotzdem fragen auf@Wuschel-Core. ^^

Wie lautet die Fehlermeldung?
Schon im Einzelschrittmodus durchs Programm gegangen?
KEINE Fehlerbehandlung vorhanden!!! (feof oder ferror)

Des Weiteren:
01.
do 
02.
03.
fread (pers, sizeof(struct Person),1,fp);  
04.
}while(pnr!=pers.pnr);
Wenn ich das richtig lese, willst du immer nur den ersten Datensatz aus fp auslesen und das solange deine Bedingung ungleich ist?
Bitte warten ..
Mitglied: 76109
03.05.2009 um 16:05 Uhr
Hallo wuschel-cOre,

also, erstmal bin ich ziemlich verwirrt,

Als ich mein letzten Borland 'C' Code vor ca 15 Jahren geschrieben habe, da gab's noch gewisse Syntaxregeln. So wurden z. B. Kommentare folgender Maßen gekennzeichnet, ansonsten wurde eine Syntax-Fehler ausgegeben.

Bei einer Zeile: // Kommentar für eine Zeile
Bei Blockzeilen: /* Am Anfang des Kommentarblocks und */ am Ende des Blocks

Dann schreibst Du noch Kommentare ohne irgendwas direkt hinter die Anweisungen

Zu meiner Zeit hätte das schon eine Menge an Compiler-Fehler verursacht.

Ausserdem solltest Du vielleicht mal die Funktion der Tab-Taste nutzen, um Deinen Code etwas übersichtlicher zu gestalten(Wartungsfreundlicher).

Gruß Dieter

PS. Nutze die Formatireungshilfe für Code. 1.Zeile = <$code> und letzte Zeile = <$/code> aber ohne das Dollarzeichen.
Bitte warten ..
Mitglied: 76109
03.05.2009 um 16:58 Uhr
Hallo wuschel-cOre,

großes Lob. Sieht doch gleich viel besser aus

Gruß Dieter
Bitte warten ..
Mitglied: 76109
03.05.2009 um 17:42 Uhr
Hallo wuschel-cOre,

Versuch mal das:

01.
fread (&pers, sizeof(struct Person),1,fp); 
Normaler übergibst Du ja einen Buff-Pointer, aber hier musst Du, wenn ich nicht irre die Adresse (&pers) der Struct übergeben?

Probiers aus. Ist halt schon sehr lange her.

Gruß Dieter
Bitte warten ..
Mitglied: mrtux
03.05.2009 um 17:52 Uhr
Hi !

Zitat von 76109:
Als ich mein letzten Borland 'C' Code vor ca 15 Jahren
geschrieben habe, da gab's noch gewisse Syntaxregeln. So wurden

Ja ja damals gab es auch noch keine automatische Code Komplettierung, wir mussten den Kopf noch selber anstrengen.

Zu meiner Zeit hätte das schon eine Menge an Compiler-Fehler
verursacht.

Die heutigen IDEs, lassen doch jeden Blödsinn durchgehen. Seit dem ganzen .net Krempel, gibt es Entwickler die zwar hervorragende Kenntnisse in C++, C# oder VB haben aber nicht mal die einfachsten Hintergrundkenntnisse über das Ziel-OS haben. Wie sonst kann ich mir solchen Schwachsinn erklären, dass es Applikationen gibt, in denen z. B, die Windows Systempfade oder die Netzwerkkonfiguration hardgecoded wurden.

Mei mei mei

mrtux
Bitte warten ..
Mitglied: 76109
03.05.2009 um 18:06 Uhr
Hallo mrtux,

das sind die Zeichen der Zeit. Programmieren per Drag&Drop
Für's Denken bleibt da nicht mehr soviel viel Zeit.

Gruß Dieter
Bitte warten ..
Mitglied: maretz
03.05.2009 um 18:14 Uhr
Moin,

ok, mein Fehler... Ich bin es halt gewohnt das jemand der eine Frage hat dieses auch den möglichen Antwortgebern so deutlich wie möglich mitteilt... Denn ich lese nicht erst den gesamten Quellcode durch BEVOR ich überhaupt weiss wo das problem liegen sollte...
Bitte warten ..
Mitglied: H41mSh1C0R
03.05.2009 um 18:54 Uhr
laut C Ref. kommt da kein Adressoperator hin.
Bitte warten ..
Mitglied: mrtux
03.05.2009 um 19:35 Uhr
Hi !

Zitat von 76109:
Hallo mrtux,
das sind die Zeichen der Zeit. Programmieren per Drag&Drop

Dagegen habe ich eigentlich nix, wenn Man(n) oder Frau weiss, was er/sie tut. Oft liegt aber genau da das Problem und nicht an der verwendeten IDE

Für's Denken bleibt da nicht mehr soviel viel Zeit.

...und wir Admins müssen den Schrott dann immer ausbaden

mrtux
Bitte warten ..
Mitglied: Biber
03.05.2009 um 19:58 Uhr
Zitat von 76109:
Hallo wuschel-cOre,

großes Lob. Sieht doch gleich viel besser aus

Gruß Dieter
<OT>
Moin wuschel-cOre,
moin maretz, H41mSh1COR, mrtux und didi1954,

@wuschel-cOre
Ich habe Deinen Code im -sagen wir mal großzügig- "Beitrag" in Code-Tags gesetzt.

Das war jetzt der zweite lieblos hingerotzte Beitrag innerhalb von 2 Tagen.
"Drei Mal ist Bremer Recht" heißt es bei mir zu Haus - Du solltest keine zu optimistischen Analogien für Deine Beiträge daraus ableiten.

Versprechen meinerseits:
Den nächsten Mir-doch-egal-Beitrag werde ich im Fluge löschen (ohne Umweg über Papierkorb).

Grüße
Biber
</OT>
Bitte warten ..
Mitglied: 76109
03.05.2009 um 19:59 Uhr
Hallo H41mSh1C0R,

wie gesagt, es ist schon sehr lange her.

also, ich würde vorschlagen den Code mit dem Debugger zu testen. Das ist die einfachste Methode einen Fehler zu finden

Aber vermutlich muss der "pers" erst noch einen (sizeof) Heap-Speicherplatz anfordern. Oder den Pointer weglassen, dann belegt die Struct Person Speicherplatz im Datensegment und kann mit "&Person" übergeben werden. So oder so ähnlich.

Gruß Dieter

PS. Wenns hilft. Ich habe noch eine uralte CD gefunden:

01.
 struct DREC { 
02.
           DB_     ATTR;                   
03.
           DW_     TIME;  
04.
           DW_     DATE;  
05.
           DD_     SIZE;    
06.
           DB_     NAME [13];    
07.
           DB_     RES0 [8]; 
08.
           VD_    *DPTR;     
09.
         }; 
10.
 
11.
  struct DREC  *DINFO; 
12.
 
13.
 if ( heapinit (DINFO, sizeof (struct DREC) * 1536, 0) )   exit (1);
oder
01.
 struct {   DD_    SZ;  
02.
            DB_    AR;  
03.
            DB_    AH; 
04.
            DB_    AS;  
05.
            DB_    AD; 
06.
            DB_    AA; 
07.
            DW_    DT; 
08.
            DW_    DM; 
09.
            DW_    DJ; 
10.
            DW_    TH; 
11.
            DW_    TM; 
12.
            DW_    TS; 
13.
         }  FINFO; 
14.
 
15.
 getftime ( hdl, &FINFO.TS ); 
16.
 
Bitte warten ..
Mitglied: 76109
03.05.2009 um 20:24 Uhr
Zitat von Biber:
@wuschel-cOre
Ich habe Deinen Code im -sagen wir mal großzügig "Beitrag" in Code-Tags gesetzt.

Hallo Biber,

OK, dann nehme ich mein großes Lob zurück und gebe es an Dich weiter Irgendwie hat mich das gleich daran errinnert, als DU meinen ersten Code so schön formatiert hattest. War doch verdächtig perfekt formatiert.

Zitat von mrtux:
...und wir Admins müssen den Schrott dann immer ausbaden

Hallo mrtux,

da bin ich aber froh, dass ich kein Admin bin und das ganze etwas lockerer sehen kann

Gruß Dieter
Bitte warten ..
Mitglied: wuschel-cOre
03.05.2009 um 23:56 Uhr
Okay Leute danke erstmal für die Hilfen mehr oder weniger!
didi1954 du hast recht. Der & Operator muss vorhanden sein.
Wird aber vom Compiler nicht als Fehler interpretiert ??
sorry wegen den formatierungen und der schlechten Beschreibung wollte eig. darauf hinaus
was beim fread der fehler war bzw. ist.

Habe noch einmal alles überarbeitet!.
Bitte warten ..
Mitglied: Biber
04.05.2009 um 07:30 Uhr
Zitat von wuschel-cOre:
sorry wegen den formatierungen und der schlechten Beschreibung
wollte eig. darauf hinaus was beim fread der fehler war bzw. ist.

Habe noch einmal alles überarbeitet!.
Moin wuschel-cOre,

danke Dir für das Überarbeiten.
Ist Deine Frage damit beantwortet (gelöst) oder sind noch Fragen offen?

Grüße
Biber
Bitte warten ..
Mitglied: 76109
04.05.2009 um 09:47 Uhr
Hallo wuschel-cOre,

Prima, Problem gelöst

Falls Deine Programme mit der Zeit komplexer werden, würde ich Dir dringend empfehlen, Dich mit den Debugger-Funktionen vertraut zu machen, da findest Du einen Fehler in der Regel viel schneller und man lernt einiges dazu. Ideal währe es natürlich, wenn Du Dir noch Assembler-Kenntnisse aneignen würdest, damit Du auch im Assembler-Modus debuggen kannst. Dann siehst Du auch den ganzen Ablauf und was im Hintergrund so vieles unnötige passiert. Das sind zum einen Bibliotheken-Schrott und zum anderen, die falsche Auswahl einer Funktion z.B. Printf, Prints oder Puts. Was ist der Unterschied und welcher Aufwand
wird letztendlich beim Einbinden von Bibliotheksmodulen betrieben. Das soll jetzt nur mal Aufzeigen, dass man wesentlich effektiver programmieren kann, wenn man den ganzen Ablauf nachvollziehen kann.


Gruß Dieter
Bitte warten ..
Mitglied: lowbyte1
05.05.2009 um 10:08 Uhr
Helo

Nemmt doch einfach eine referenz zur Hand, oder ein schön fettes Buch auf dem c/c++ steht. Das sind keine Probleme , sondern nur unwissenheit über die Syntax der Programmiersprache.
Nicht böse gemeint ...


lb
Bitte warten ..
Mitglied: H41mSh1C0R
06.05.2009 um 11:17 Uhr
Naja genau aus dieser Referenz habe ich ja gelesen und da stehen in den Beispielen KEINE "&" Operatoren an der Stelle. Hier hatte der TE aber anscheinend Erfolg, diesen & Operator zu setzen.

*grübel*

Oder die Referenz von G.Willms hat nen Fehler. ^^
Bitte warten ..
Mitglied: 76109
06.05.2009 um 12:49 Uhr
Hallo H41mSh1C0R,

ich denke nicht, dass Deine Referenz fehlerhaft ist.

Der Unterschied liegt nur in der Definition einer Structur (siehe meine Beispiele). Vergleichbar mit char str[80] und char *str.

Im 1.Fall ist die Structur nur definiert und hat noch keinen Speicherplatz. Ihr wird ein *Null-Pointer zugewiesen, für den z.B. mit Malloc erst ein Speicherplatz auf dem Heap angefordert werden muss und der *Pointer dann die Adresse auf diesen Speicherplatz enthält.

Im 2.Fall ist der Structur bereits Speicherplatz im Globalen Datensegment zugewiesen. D.h. hier muss dann die Adresse mit dem Adress-Operator (&) übergeben werden.

Die Funktion Fread erwartet als Parameter einen Pointer (void *ptr) auf die Structur.


Gruß Dieter
Bitte warten ..
Mitglied: H41mSh1C0R
06.05.2009 um 13:31 Uhr
Hi Dieter,

Also angewendet auf das Problem vom TE, greift Fall 2, weil mit fseek der Dateipointer an den Anfang gestellt wurde und dann mit fread bei jedem Durchlauf beginnend vom Anfang, immer Portionsweise ein Datensatz abgeholt wird.

Der Pointer auf die Struktur ist also immer die Adresse vom Anfang einer jeden Portion?

Sehe ich das richtig?

Gruß
H41mSh1C0r
Bitte warten ..
Mitglied: 76109
06.05.2009 um 16:02 Uhr
Hallo H41mSh1C0R,

also, mit den Funktionen FSEEK und FREAD hat das jetzt im Grunde nichts zu Tun.

Bei TE wird mit FREAD nacheinander immer nur ein Datensatz eingelesen und FSEEK steht automatisch auf dem nächsten Datensatz.

Es geht aber generell darum, wie ein Pointer anhand der einer Definition übergeben werden muss. Adresse (&) oder Pointer (*).

Wenn eine Funktion als Parameter einen Pointer (void *ptr) verlangt, dann muss das übergeben werden, was auf die Daten zeigt.

Im 1. Fall ist *DINFO ein Pointer. Er enthält z.B. durch Malloc initialisiert, die Adresse auf die Structur DREC. DINFO = [Zeiger auf Struct-DREC]
Im 2. Fall ist FINFO die Adresse. Hier stehen die Structur-Daten schon. FINFO = Struct-Daten und &FINFO = [Zeiger auf Struct-FINFO]

Ich weiß nicht, wie ich es besser erklären kann.

Gruß Dieter
Bitte warten ..
Mitglied: H41mSh1C0R
06.05.2009 um 18:38 Uhr
Hi Dieter,

dann ist das ja so wie ich das auch meine ^^.

Das was der TE mit fread abholt, enthält ja portionsweise seine Struct-Daten und somit muss der Adressoperator rein, weil die Daten/Struct ja bereits da sind.

Also Fall 2.

Gruß
H41mSh1C0r
Bitte warten ..
Mitglied: 76109
06.05.2009 um 20:14 Uhr
Hallo H41mSh1C0R,

Yep, das siehst Du richtig. Offensichtlich habe ich Deine Frage wohl vorher Missverstanden.

Hoffe, nun ist alles geklärt.

Gruß Dieter
Bitte warten ..
Mitglied: H41mSh1C0R
07.05.2009 um 10:51 Uhr
Hallo Dieter,

alles geklärt und danke für deine Erklärung und Beispiele.

Ist ja nicht so das ich das jeden Tag bräuchte, aber auffrischen schadet ja nie. ^^

Gruß
H41mSh1C0r
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...

Windows Netzwerk
gelöst Problem mit PSexec64 von Sysinternals (8)

Frage von MaxMoritz6 zum Thema Windows Netzwerk ...

Windows Server
gelöst Problem nach DC-Installation unter Server 2012 R2 (9)

Frage von manuel1985 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...