Toon posts:

[C++] Probleem met openen bestanden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem waar ik zelf niet uit kom, laat ik beginnen met het geven van een voorbeeld:

de string filename[512] bevat zoiets als "/textures/aap_01_fin"
nu moet ik dat bestand openen en het bevat de extensie .tga, dit kan ik handig oplossen met strcat(filename, ".tga").
Nu het eigenlijke probleem; in de bestandsnaam kan nog een "_d" staan (meestal achteraan, dus "aap_01_fin_d.tga". Maar het kan ook ergens in het midden staan, dus "aap_d01fin.tga")

Als het achteraan staat lukt het me om het bestand te openen d.m.v. strcat(filename, "_d.tga"), maar als de "_d" ergens in het midden staat lukt het me niet. Ik heb het al geprobeerd met het random toevoegen van "_d" aan filename in alle mogelijke posities en daarna kijken of het bestand geopend kan worden, maar dit duurt erg lang aangezien ik via deze manier zo'n 100 bestanden moet openen.

Heeft iemand een idee of en hoe ik dit kan oplossen? Ik kom er zelf namelijk niet meer uit...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Bliep? Je weet toch hopelijk wel het filenaam-formaat van een in te lezen file? :?

Hoe kom je bij die random posities? Wie bepaalt waar die infix komt te staan?

* curry684 is het helemaal kwijt.... :'(

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21-08 18:33
Begrijp ik het goed dat je bestanden waarbij een "_d" in de naam staat niet kunt openen, behalve als die _d aan het eind van de naam staat ? 8)7
Geinig.

NB Probeer het eens met een _e. ;)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Wonderlijk ook, dat jij je bestanden met strcat kunt openen...

Verwijderd

Je kan een directorylisting opvragen in je programma en kijken of je bestand daarin voorkomt.

Verwijderd

Topicstarter
Ik zal het nog maar ff duidelijk maken, in de char array filename moet dus uiteindelijk de bestandsnaam komen te staan zodat ik hem daarna kan openen (en niet met strcat). Het probleem is dus die "_d" die er wel in staat maar dankzij de open standaard van die bestanden kan hij overal tussenin staan.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Ah, op die manier. Sjord's sugestie is wel aardig: kijk welke bestanden in de directory overeenkomen met jouw patroon (of ze, op de _d na, gelijk zijn aan jouw bestandsnaam, dus).

Ik kan me trouwens voorstellen dat gewoon allemaal testen ook wel een aardig alternatief is; hoe kom je op die 100 keer proberen? De bestandsnaam is toch gemiddeld hardstikke kort (een stuk of 10-15 karakters)? Ik neem tenminste aan dat de _d uitsluitend in de bestandsnaam kan voorkomen en niet in de rest van het pad.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Het probleem is dus die "_d" die er wel in staat maar dankzij de open standaard van die bestanden kan hij overal tussenin staan.
Dit is geen open standaard maar plain stupid... dus de file DATA_BOD_CREATED die ik net heb gemaakt is duidelijk ook van jouw programma 8)7

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21-08 18:33
Ik vraag me af, welke standaard schrijft voor dat er een _d in een filenaam moet staan, maar dat het niet uitmaakt waar die staat ?
Is het mogelijk om die standaard te herzien misschien ? ( Dat is namelijk hard nodig, zo op het eerste gezicht )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
curry684 schreef op 17 September 2003 @ 09:29:
Dit is geen open standaard maar plain stupid... dus de file DATA_BOD_CREATED die ik net heb gemaakt is duidelijk ook van jouw programma 8)7
offtopic:
Nee, want daar zit geen "_d" (zelfs geen "_D") in! :P

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

offtopic:
Ik bedoelde dus 'bod_data_created' op een case-insensitive filesystem :D

Professionele website nodig?


  • wortelsoft
  • Registratie: Februari 2001
  • Laatst online: 21-08 16:57
Ik vind de probleem stelling nogal vaag.

Maar ik denk dat het volgende aan de hand is:

1 Je hebt een string met een path en een bestandsnaam die nog geen extensie heeft.
2 je wilt uit die string alleen de file name hebben.

eerste vraag zitten er in die string 512 meerdere filenames?

Nee dan lijkt het me vrij eenvoudig.

1 zoek op de positie van de verschillende backslashes of begin de string vanaf achter te doorzoeken op de backslash.

2 de string zal na de eigenlijke tekst leeg zijn. dus zoek naar waar het lege deel van de string begint

3 kopieer dat deel van de string naar een andere string en plak er de extensie aan

Verwijderd

Topicstarter
Bedankt iedereen, maar ik laat het proberen maar zitten...
Het is idd een rare standaard, eigenlijk hoort de "_d" achter de filename te zitten maar om de een of andere reden vonden de mensen het leuk om "_d" ook ergens midden in de filename te zetten. Als ik de standaard volg is het wel makkelijk om het bestand te openen, ik plak gewoon "_d.tga" of een andere extensie achter de string. De standaard veranderen ligt echt kilometers ver buiten mijn invloed, het is namelijk de manier waarop de bestandsnamen van de textures in Doom III level bestanden zijn opgeslagen. Ik los het voorlopig wel op door alle textures te renamen, maar bedankt voor alle hulp!
Pagina: 1