läsa filer /resource management...

Tråden skapades och har fått 2 svar. Det senaste inlägget skrevs .
1

Jag håller på att porta ett litet program från Linux till OSX. I programmet vill jag läsa in ett par filer mha fopen/fread. I Linux startar jag programmet via terminalen så att mina mediafiler ligger i en undermapp files/ är inga problem där. I OSX vill jag naturligtvis inte vara tvungen att öppna ett program via terminalen så här stöter jag på ett problem:
jag vill inte ange resurser mha absolut filepath "fopen("Users/filip/proj/blaha/gojs/files/test.obj", "r") utan med relativ "fopen("files/test.obj","r")"
Som jag förstår det så vet jag inte riktigt var "current directory" är ngnstans när jag dubbelklickar min applikation. Jag gissar att jag skulle kunna använda argv[0] för att ta reda på var programmet ligger men det har jag inte implementerat. jag tänkte att det kankse fanns ngt snabbt och käkt knep
Jag vill i möjligaste mån inte binda mig till ngn platformsspecifik API så helst använder jag inte Carbon eller Cocoa till vanlig in/ut.

Hmm...kanske en litet förvirrad fråga men jag har inte hittat ngn bra lösning själv... jag väntar med ytterligare funderingar tills jag ser om jag får med ngn på en diskussion

Det finns förmodligen flera sätt att göra det på, men jag kan bara ett.

#include <stdio.h>
#include <stdlib.h>

int main(int argv, char *argc[]) {
printf("Current path: %s
", getenv("PWD"));

return 0;
}

Den här funktionen visar bara pathen till den mapp du är i. Så om du är i en annan mapp och startar genom ex. ./hejsan/jaha/program.out så kommer den att visa pathen du var i när du startade programmet. Det går säkert att faxa till på något sätt. Läs lite om getenv i man, vet ja!

Hmm...tack för svaret. Jag valde att istället använda en annan approach. Efter tips på en mailinglista, macosx-dev@omnigroup.com, som jag för övrigt måste rekommendera till er som redan inte är med på den, så valde jag att använda mig av NSBundle. Funkar ung så här ifall ngn undrar:

NSBundle *myBundle = [NSBundle mainBundle];
NSString *filePath = [myBundle pathForResource:@aFile ofType:@aType];
fopen((char *)[filePath cString], "r");
 

nåja, det blir bra tills vidare...

1
Bevaka tråden