Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

infinity^0

Frischling

  • »infinity^0« ist der Autor dieses Themas

Beiträge: 7

Wohnort: Oberbayern

  • Private Nachricht senden

1

06.10.2011, 14:41

C++, Windows 7 lässt mich nicht in eine Datei schreiben

tag,

in der Überschrift stehts ja schon, aber nun etwas ausführlicher.

Ich benutze VS C++10 Express (32 Bit) und Windows 7 Ultimate 64 Bit. Läuft eigentlich prima. Ich kann mit CreateFile ne Datei erlstellen (NTFS). Das Problem beginnt beim reinschreiben in die Datei. Mit WriteFile bekomme ich als Rückgabewert immer nur false zurück. GetLastError gibt nen Wert aus, der im Endeeffekt nur bedeutet, dass ich keine Zugangsberechtigung auf die Datei habe. MS, da hast du ja fein mitgedacht... Angeblich lässt sich das Problem lösen, indem man sich Adminrechte beschafft. Also habe ich mich an die UAC gemacht und sie deaktivert. Half nichts. Meine erstellte Exe-Datei im Debug-Ordner lässt sich per Kontext als Admin starten. Leider brachte auch das keinen Erfolg :( Ein wenig komisch is ja nur, XP macht beim selben Quellcode keine Probleme. Hat XP denn keinen Zugriffsschutz? Ich denke doch schon.

Solange ich keine Lösung für das Problem finde, muss ich mit XP weiter an meiner Sache arbeiten.

Ich danke für die Bemühungen und bin echt gespannt was dabei rauskommt. Irritiert wie ich am Anfang über die Sache war, dachte ich zuerst das 64-Bit sei dran schuld. Man kann eben auf mehrere Arten blauäugig sein.. :wacko:

Meine Frage dazu ist, wie schaffe ich es in C++ und W7 Daten in meine Datei zu schreiben?

CreateFile(L"C:\\abc.txt", GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

char e[2];e[0]='s';e[1]='z';//is nur ein test
bool wr=WriteFile(hF,e,1,&dwwrite,NULL);

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.10.2011, 15:27

Musst du denn unbedingt nach C:\ schreiben?
Ich denke, dass es daran liegt. Schreib doch ins Verzeichnis deiner Anwendung.

steffen1997

Treue Seele

Beiträge: 200

Beruf: Schüler

  • Private Nachricht senden

3

06.10.2011, 15:34

vielleicht haste nicht die ausreichenden Rechte mach mal Vs2010 als Administrrator ausführen(Rechtsklick ->Als Administrator ausführen und das Feenster mit ja bestätigen) oder Kontorechte erweitern.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

06.10.2011, 15:56

Such dir einen besseren Ort als C: für deine Datei ;)

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

5

06.10.2011, 15:56

Ich habs mal schnell ausprobiert! Mit Adminrechten klappts bei mir!
Der Tipp von David sollte aber auf jeden Fall funktionieren! :)

Mal noch was anderes:
Ich weiß jetzt natürlich nicht, ob das Absicht war, aber schreib mal lieber:

C-/C++-Quelltext

1
WriteFile(hF,e,2,&dwwrite,NULL); 

statt

C-/C++-Quelltext

1
WriteFile(hF,e,1,&dwwrite,NULL); 

sonst wird nur der erste Buchstabe in die Datei geschrieben... ;)

dachte ich zuerst das 64-Bit sei dran schuld
...und nein 64bit ist nicht Schuld dran! ^^

Mfg Harry222

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

6

06.10.2011, 22:32

Beim Beschreiben von C:\, C:\Programme (!!!) und C:\Windows\System32\ muckt Win 7 gerne rum. Gibt glaube ich noch ein paar Verzeichnisse die man nicht ohne weiteres beschreiben kann. Zumindest nicht ohne sich für die Datei erst die Rechte zu beschaffen (Stichwort "takeown -f").

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

06.10.2011, 22:56

Anstatt sich einfach gleich mal "Rechte zu beschaffen", sollte man vielleicht erstmal für einen Moment innehalten und darüber reflektieren, was genau man eigentlich gerade im Begriff ist zu tun. C: ist nicht der Ort um irgendwelche Dateien abzulegen. Es hat durchaus seine Gründe warum Windows tut, was es tut...

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

8

06.10.2011, 23:16

Wobei ich die Rechteverwaltung bei C:\Programme etwas übertrieben finde. Aber Windows mag es eben lieber wenn die Programme ihre Daten in CSIDL_LOCAL_APPDATA ablegen (C:\Documents and Settings\username\Local Settings\Application Data oder auf Deutsch C:\Dokumente und Einstellungen\User\Lokale EInstellungen\Anwendungsdaten).
Ist verständlich, aber ich mag es wenn Programme die Daten in ihrem Pfad speichern (noch besser wenn man den Speicherpfad wählen kann).

infinity^0

Frischling

  • »infinity^0« ist der Autor dieses Themas

Beiträge: 7

Wohnort: Oberbayern

  • Private Nachricht senden

9

09.10.2011, 16:26

Hätte nicht gedacht, dass es dazu soviel zu schreiben gibt ;) Ich habs hinbekommen und zwei Fehler gemacht. Die Anweisung close() bei der Datei sagt wohl alles :evil: leider wurde von mir die Datei zu früh geschlossen (für WriteFile) und ich habe es vollkommen übersehen - ohne worte -. Des weiteren stimmts dann wohl nicht, dass es der selbe Quellcode war..

@mcp@dot@David Scherfgen

Beim Anlegen eines neuen Projects (Admin) war es egal, ob eine Datei in c, e oder f(usb-stick) war. War alles erfolgreich.

@Harry222

Wieviele Bytes ich schreibe ist an sich egal, zwei Byte geht und ein Byte auch. Du hast mich erst auf die Idee gebracht, die Sache in einem neuen Project zu testen :D

@Steffen1997

Das stimmt allerdings: nur als Admin konnte ich alle genannten LWs mit dem neuen Project beschreiben.



muchas gracias für eure Ideen

Werbeanzeige