[c++ builder] Fileopening van binaire bestanden

Pagina: 1
Acties:
  • 178 views sinds 30-01-2008
  • Reageer

  • oogapp0ltje
  • Registratie: Januari 2001
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      AnsiString DataStr;

      //Open file, but allow windows to use the file
      int FileHandle=FileOpen(txtFile->Text, fmShareDenyNone);

      //Get filelength thru position of EOF
      int FileLength=FileSeek(FileHandle, 0, 2);

      //Point back to begin of file
      FileSeek(FileHandle, 0,0);
      FileRead(FileHandle, DataStr.c_str(), FileLength);

      //Close
      FileClose(FileHandle);

      Application->MessageBoxA(DataStr.c_str(), "", 0);

Dit is het stukje code dat ik gebruik om een bestand te openen en de data er uit te halen, maar wanneer ik dit proces uitvoer bij bijvoorbeeld een EXE file krijg ik een "ACCESS VIOLATION", hebben jullie enig idee hoe ik dit kan voorkomen?

| To acknowledge what is known as known and what is not known as known is knowledge. |


Verwijderd

Is dat exe bestand toevallig op dat moment in gebruik?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Debug eens. Stap eens door uw code en dan ga je de regel zien waar je een access violation op krijgt.

https://fgheysels.github.io/


  • oogapp0ltje
  • Registratie: Januari 2001
  • Niet online
Is dat exe bestand toevallig op dat moment in gebruik?
nee, maar dat zou in dit geval niet uit moeten maken vanwege fmShareDenyNone

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • oogapp0ltje
  • Registratie: Januari 2001
  • Niet online
bij int FileHandle=FileOpen(txtFile->Text, fmShareDenyNone);
gaat ie de mist in

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Op dinsdag 18 juni 2002 11:21 schreef Ravenof het volgende:
nee, maar dat zou in dit geval niet uit moeten maken vanwege fmShareDenyNone
Jawel, als het bestand al in gebruik IS zonder te sharen, dan gaat het niet helpen als jij het bestand opent met fmShareDenyNone.

Maar een .exe openen voor lezen moet geen probleem zijn, anders zou je er ook geen 2 tegelijk kunnen opstarten.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • oogapp0ltje
  • Registratie: Januari 2001
  • Niet online
het bestand is toch echt niet in gebruik, zou het misschien dan komen door de tekens in het EXE bestand, misschien ziet de compiler bijvoorbeeld een quote teken " als een teken om de string af te sluiten :?

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • AaroN
  • Registratie: Februari 2001
  • Laatst online: 16-08-2023

AaroN

JayGTeam (213177)

[blaat]
voudjuh
[/blaat]

* AaroN has been n00baliZed again :7

JayGTeam (213177)


  • oogapp0ltje
  • Registratie: Januari 2001
  • Niet online
Op dinsdag 18 juni 2002 11:39 schreef AaroN het volgende:

[..]

Dit moet werken volgens mij, je moet het opslaan in een String en niet de toString functie gebruiken...

* AaroN is n00b maar denkt dat dit de reden is
Dat gaat helaas niet want FileRead(int filehandle, void* buffer, int mode);
zoals je ziet is er een void* nodig, een AnsiString kan niet geconvert worden naar een void*

* oogapp0ltje is ook n00b maar denkt dat hij zo zou moeten functioneren

hij doet het openen trouwens wel moet gwone non-binaire files (behalve PHP scripts, die doet hij ook niet)

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 11:17

Creepy

Tactical Espionage Splatterer

Waarom niet: fmOpenRead | fmShareDenyNone

openen voor alleen lezen, en sharen van dat bestand toestaan.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • oogapp0ltje
  • Registratie: Januari 2001
  • Niet online
Op dinsdag 18 juni 2002 11:53 schreef Creepy het volgende:
Waarom niet: fmOpenRead | fmShareDenyNone

openen voor alleen lezen, en sharen van dat bestand toestaan.
idd een betere manier, maar het maakt geen verschil mbt. tot mijn probleem

| To acknowledge what is known as known and what is not known as known is knowledge. |


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 11:17

Creepy

Tactical Espionage Splatterer

Die fileopen van de VCL is toch gewoon een wrapper voor de Windows API openfile?

Als dat ding dan -1 teruggeeft kan je met GetLastError de precieze error terugkrijgen.. misschien dat je daar wat aan hebt..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 00:27
Wat zowiezo niet gaat werken is lezen in een const char*, zoals c_str() teruggeeft.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1