OVH Cloud OVH Cloud

path

5 réponses
Avatar
Fred
Bonjour,

voici un bout de code sur Mac OS X (en C++ sour project builder)

...
OSErr anErr=noErr;
FSSpec aFSSpec;
Str255 path="MapsAR72.jpg";

anErr=FSMakeFSSpec(0,0,path,&aFSSpec);
// anErr == -43
...


Qu'est-ce qui cloche?

Fred

5 réponses

Avatar
patrox

voici un bout de code sur Mac OS X (en C++ sour project builder)

...
OSErr anErr=noErr;
FSSpec aFSSpec;
Str255 path="MapsAR72.jpg";


Str255 est une pascal string.
Str255 path="pMapsAR72.jpg"; ( rajouter le p )

et l'affaire est dans le sac. ( il est possible qu'il soit necessaire de
faire Str255 path="p:MapsAR72.jpg"; ) ( rajout des : )

pat.

Avatar
Fred
"patrox" a écrit dans le message de news:
3f4f3028$0$6219$

voici un bout de code sur Mac OS X (en C++ sour project builder)

...
OSErr anErr=noErr;
FSSpec aFSSpec;
Str255 path="MapsAR72.jpg";


Str255 est une pascal string.
Str255 path="pMapsAR72.jpg"; ( rajouter le p )


enErr == -43


et l'affaire est dans le sac. ( il est possible qu'il soit necessaire de
faire Str255 path="p:MapsAR72.jpg"; ) ( rajout des : )


anErr == -43

je ne comprends pas pourquoi... et je commence a partauger...

Fred


Avatar
Patrick Stadelmann
In article <binftj$2ah$,
"Fred" wrote:

je ne comprends pas pourquoi... et je commence a partauger...


C'est tes 2 premiers paramètre (0 et 0) qui sont faux :

http://developer.apple.com/documentation/mac/Files/Files-91.html

Le répertoire par défaut est celui ou se trouve ton application, pas la
racine du disque. Donc soit remplacer le premier 0 par un vRefNum ou un
drive number, soit remplacer le 2e 0 par fsRtDirID qui est le dirID du
répertoire racine :

http://developer.apple.com/documentation/mac/Files/Files-83.html

Patrick
--
Patrick Stadelmann

Avatar
Patrick Stadelmann
In article
,
Patrick Stadelmann wrote:

In article <binftj$2ah$,
"Fred" wrote:

je ne comprends pas pourquoi... et je commence a partauger...


C'est tes 2 premiers paramètre (0 et 0) qui sont faux :


Oops, j'ai failli oublier, il faut aussi remplacer :

Str255 path="pMapsAR72.jpg";

par

Str255 path="p:MapsAR72.jpg";

pour spécifier que c'est un "partial pathname" et non pas un "full
pathname".

Patrick
--
Patrick Stadelmann


Avatar
Fred
"Paul Guyot" a écrit dans le message de news:

In article (Dans l'article) <binafr$bg7$,
"Fred" wrote (écrivait) :

Mon fichier n'existe pas??????? y'a un truc qui cloche la...
j'ai pourtant un fichier du meme nom a la racine de mon disque (je suis
desole mais je suis nouveau sur Mac)


Inutile d'être désolé. Pat a sans doute raison (ta chaîne pascale est
foireuse, mais normalement le compilateur te donne un avertissement pour
une conversion implicite de char* vers unsigned char*, non?).

Ceci dit, permets-moi d'insister, puisque tu te présentes comme nouveau
sur

Mac et que tu intitules ton message "path", sur le fait que FSMakeFSSpec
n'est généralement pas utilisable pour récupérer un FSSpec sur un fichier
à

partir d'un chemin. Il te faut trouver le volRefNul et le dirID kivonbien,
même s'il est possible d'utiliser un chemin complet (au format MacOS, les
séparateurs sont des :, et tu as plein d'autres problèmes comme l'absence
de garantie qu'un chemin désigne un unique élément vu que deux volumes
peuvent avoir le même nom).

En général, on procède ainsi:
- on détermine le FSSpec de l'application courante (on peut demander au
ProcessManager) et on trouve ainsi le volRefNum et le dirID pour un
fichier

à côté de l'application.
- on utilise FindFolder pour trouver le dirID d'un dossier standard
(préférences, dossier système).

C'est la méthode propre. Même si c'est moins vrai sous MacOS X, un chemin
en dur, c'est mal, parce que c'est très non-Mac. Par exemple, un
utilisateur ne s'attend pas à ce que ton logiciel ne marche plus s'il le
sort du dossier Applications à la racine. Et il aura raison.

Ceci dit, les deux 0 que tu as mis devraient convenir parfaitement pour un
fichier à la racine du volume par défaut.

Si tu tiens absolument à utiliser un chemin, tu peux créer un FSRef à
partir d'une chaîne.

Paul



voila mon code final :

#ifdef WIN32
Str255 path;
CopyCStringToPascal(streamUrl.c_str(),path);
anErr=FSMakeFSSpec(0,0,path,&aFSSpec);
#endif

#ifdef MacOSX
FSRef aFSRef;
anErr=FSPathMakeRef((UInt8*)streamUrl.c_str(),&aFSRef,NULL);
anErr=FSGetCatalogInfo(&aFSRef,0,NULL,NULL,&aFSSpec,NULL);
#endif

qui a l'air de fonctionner correctement.

Fred