OVH Cloud OVH Cloud

Comment renseigner la fiche résumé des propriétés d'un fichier (autre que .exe)

21 réponses
Avatar
eulalie
Bonjour

Je voudrais pouvoir par programmation remplir les champs
-titre,objet,auteur,cat=E9gorie,mots clefs,commentaires-
de la fiche 'R=E9sum=E9' des propri=E9t=E9s d'un fichier (bouton droit sur
le fichier 'propri=E9t=E9s' onglet 'R=E9sum=E9')

Merci pour votre aide

10 réponses

1 2 3
Avatar
Sylvain
James Kanze wrote on 31/12/2006 00:32:

J'avoue que ça ne m'était pas bien clair si sa question
concernait comment trouver les informations, comment créer un
onglet, ou comment communiquer les informations vers l'onglet.


bon résumé en effet.

C'est quoi, par exemple, « la ressource 'version' » ? Voire même,
qu'est-ce que tu entends sous « ressource », quand tu parles
d'un fichier ? Je connais le concept d'un fichier de ressources
sous Java, et j'ai entendu vaguement que Windows permet
d'attacher quelque chose du genre à un fichier binaire, ce qui
me semble a priori fort utile. Mais c'est à peu près la limite
de mes connaissances.


on désigne généralement par ressources, une donnée structurée,
généralement énumérable, présente dans un ensemble lui aussi structuré,
supportant donc les recherches / accès / lecture / écriture par type de
ressource et par identifiant dans chaque type.

pour plein de mauvaises raisons, dont historiques, un fichier quelconque
n'a généralement pas les moyens de stocker des ressources en plus de son
contenu de données - où les "données" sont le texte d'un fichier texte,
l'image d'un fichier image, etc.

MacOS, à ma connaissance, est le seul OS a disposer d'un file system
permettant la création d'un "resource fork" (cette partie structurée
contenant les rtessources) en plus du "data fork" usuel.

pour la majorité des OS, dont WinXXX, les ressources sont simplement
collées à la fin des données. pour un exec. tjrs sous WinXXX les
ressources d'IHM telles menus, fenetres, dialogues et 'version' sont
ainsi collées au bout du fichier.

ce mode est applicable pour les fichiers clairement structurés, un .exe
contient son bloc d'init, de dépendances (.lib externes), etc, un .mp3
commence par une description de son encodage, le nombre de 'trames',
etc; ainsi on peut coller un peu n'importe quoi à la fin de ces fichiers
(à la fin des 'données' de ces fichiers) sans que cela ne les gène.

l'approche ne peut être identique avec la plupart des fichiers type
document utilisateur, à la fin d'un doc. texte il y a la fin du texte de
ce doc. pas quelque chose d'autre ayant un autre sens, dans un JPG il
n'y a que des blocs taggés et aucune données arbitraires non
correctement taggée ne peut être insérée à la fin; donc ces fichiers
(hormi sous MacOS) ne peuvent pas fournir de ressources.

sous Java, on part du même principe (seul un stream est généralement
présent et il est soit données, soit ressources) pour définir des
fichiers qui ne contiendront que des ressources (par exemple le dump
d'un java.util.Properties).

Je sais aussi que la plupart des gestionnaires de fenêtres,
aussi bien Windows que KDE, CDE, etc. sous X, ont un système
d'associer des actions à des types de fichiers, où en général
le « type », c'est déterminé par le suffixe du nom du fichier.


la plupart font cela pour la même raison (l'absence de ressource qui
permet de typer les données); ainsi un .txt sera toujours ouvert par la
même appli enregistrée pour gérer cette extension - pour comparaison,
MacOS enregistre le type (text, jpeg, etc, y compris propriétaire) et un
identifiant d'application, on peut dès lors avoir des fichiers texte A
ouverts par l'application bloc-notes A et des fichiers texte B ouverts
par une autre application B (tandis que les extensions ne servent à
rien; ne servaient MacOS X a du les hériter de BSD).

Mais ici, il
s'agit des informations générales, et non propre à chaque
fichier. Est-ce que ça a quand même un rapport ?)


oui et non; cette extension (sur WinXXX, certains linux, ...) sert
d'identifiant unique du type de fichier, certaines de ces extensions
sont assez répandues, quasi-normalisées (.txt, .jpg, ...) pour permettre
un traitement systématique du contenu du fichier; mais même dans ce cas
il peut être simple de générer à la volée les informations spécifiques
d'un fichier (extraire le tag FFFEh d'un JPEG ou les infos plus riches
d'un JP2) ou impossible de déduire quoique ce soit, quelles infos tirer
d'un fichier texte mis à part le nombre de mots ? -- on reboucle alors
sur ton premier constat, quelle était la motivation du PO ?

Je suis prèsque sûr d'avoir mal compris quelque chose, parce que
« shell extension », pour moi, ressonne comme une extension du
programme shell.


oui, où "shell" signifie ici l'interface graphique de windows.

[...] Et bien que je me sers du compilateur VC++, je ne
sais pas encore comment invoquer le débogueur.


F5 pour lancer l'appli sous controle debug (si le project est en mode
debug); puis F10 / F11 pour tracer.


[...] pour réorganiser mes fichiers audio, je ne trouve pas
où il a caché les informations concernantes le compositeur, etc.


sous la forme de tags ID3 ajoutés à la fin du fichier. le file system
windows ne sait pas (nativement) gérer 2 flux pour un fichier.


Encore, tu m'as perdu. C'est quoi, un tag ID3 ?


là un "google tag ID3" t'apporte plein de réponses.

le format (standard?) ID3 définit les informations pouvant être collées
au bout d'un fichier mmédia.

Et qu'est-ce
que tu entends par gérer deux flux pour un fichier ?


2 sources de contenu; faire comme si le fichier était 2 sous-fichiers,
les 2 étant distincts, on peut ouvrir / modifier l'un sans toucher l'autre.

ça m'étonnerait fort que je ne pourrais pas ouvrir deux
ifstream distincts sur le même fichier.


pour accéder aux même infos, oui.
un peu selon l'OS quand même et les options d'ouverture, on peut (en
tout cas en lecture) accéder avec différents "curseurs" à différents
endroits du même fichier, mais toujours pour relire les infos de la même
partie données de ce fichier (qui est généralement la seule, cette
distinction apparait alors plus confusante qu'utile).

toutes ces considérations nous amènent largement hors chartre, mon point
était seulement de noter que les streams multiples de NTFS ne sont pas
portables (y compris entre machines Winxxx) et donc ne sont pas la bonne
façon de stocker des informations étendues / spécifiques pour des
fichiers non binaire structuré (tel un .exe, .dll, ...).
dans certains cas, on pourra adjoindre des données sous un tag réservé à
cela (cas JPG), ou bien les ajouter en fin de fichier (cas mp3), dans la
majorité des cas restants, on devra recourir à une fonctionnalité
externe (extension au système graphique) qui saura comment parser,
interpréter le fichier spécifiquement traité pour alimenter une page de
'Résumé'.

Sylvain.



Avatar
James Kanze
Sylvain wrote:
James Kanze wrote on 31/12/2006 00:32:


[...]
C'est quoi, par exemple, « la ressource 'version' » ? Voire même,
qu'est-ce que tu entends sous « ressource », quand tu parles
d'un fichier ? Je connais le concept d'un fichier de ressources
sous Java, et j'ai entendu vaguement que Windows permet
d'attacher quelque chose du genre à un fichier binaire, ce qui
me semble a priori fort utile. Mais c'est à peu près la limite
de mes connaissances.


on désigne généralement par ressources, une donnée structurée,
généralement énumérable, présente dans un ensemble lui aussi st ructuré,
supportant donc les recherches / accès / lecture / écriture par type de
ressource et par identifiant dans chaque type.

pour plein de mauvaises raisons, dont historiques, un fichier quelconque
n'a généralement pas les moyens de stocker des ressources en plus de son
contenu de données - où les "données" sont le texte d'un fichier te xte,
l'image d'un fichier image, etc.

MacOS, à ma connaissance, est le seul OS a disposer d'un file system
permettant la création d'un "resource fork" (cette partie structurée
contenant les rtessources) en plus du "data fork" usuel.

pour la majorité des OS, dont WinXXX, les ressources sont simplement
collées à la fin des données. pour un exec. tjrs sous WinXXX les
ressources d'IHM telles menus, fenetres, dialogues et 'version' sont
ainsi collées au bout du fichier.


Voilà ce qui m'explique aussi le nom. J'avais entendu parler de
cette possibilité pour les fichiers .exe sous Windows, mais je
ne le voyais pas réelement comme quelque chose de généralisable.
Au fond, je le concevais comme une partie du programme, mais une
partie qui n'a pas été traduite en langage machine.

Mais je ne l'envisagais qu'étant des données qu'utilisent le
programme même. Si j'ai bien compris, ces « resource fork »
peuvent aussi contenir des méta-informations, qui n'intéressent
pas le programme même (surtout qu'elles s'attachent à des
fichiers qui ne sont pas des programmes), mais plutôt aux
programmes qui manipulent le fichier.

Et évidemment, ça se laisse facilement *simuler* sous Windows ou
sous Unix : soit on remplace le fichier de base par un
répertoire, avec un fichier avec un nom conventionnel (p.e.
« data »), ainsi que des fichiers supplémentaires avec les
méta-informations ; soit on crée un répertoire à côté du
fichier de base, avec un nom conventionnel, où on crée les
fichiers de méta-information. Les répertoires Windows ou Unix
sont déjà bien adaptés pour stocker les données structurée, etc.
Seulement, il manque le nom conventionnel, voire la convention
de le faire. Du coup, chaque programme fait à sa guise, et les
programmes généralistes (genre copy) n'y voit rien, et ne savent
pas traiter les informations supplémentaires. (Et plus, Windows
a ajouté le « register », qui éloigne les informations encore
plus d'où on veut les avoir.)

ce mode est applicable pour les fichiers clairement structurés, un .exe
contient son bloc d'init, de dépendances (.lib externes), etc, un .mp3
commence par une description de son encodage, le nombre de 'trames',
etc; ainsi on peut coller un peu n'importe quoi à la fin de ces fichiers
(à la fin des 'données' de ces fichiers) sans que cela ne les gène.


À condition, évidemment, que la structure s'y prête. Il y a bien
des balises <meta> dans l'en-tête d'un fichier html, mais je
vois mal où mettre de telles informations dans un fichier .txt,
ou même une source C++.

l'approche ne peut être identique avec la plupart des fichiers type
document utilisateur, à la fin d'un doc. texte il y a la fin du texte de
ce doc. pas quelque chose d'autre ayant un autre sens, dans un JPG il
n'y a que des blocs taggés et aucune données arbitraires non
correctement taggée ne peut être insérée à la fin; donc ces fic hiers
(hormi sous MacOS) ne peuvent pas fournir de ressources.


Ce qui est le véritable problème. Chaque application, chaque
type de fichier a ses propres conventions. Ou non, dans le cas
des fichiers types source C++.

sous Java, on part du même principe (seul un stream est généralement
présent et il est soit données, soit ressources) pour définir des
fichiers qui ne contiendront que des ressources (par exemple le dump
d'un java.util.Properties).


Règle absolue pour Java : il faut pouvoir l'implémenter et sous
Windows et sous les Unix les plus répandus. (Note bien que la
règle pour C++ va encore plus loin, et exige qu'on puisse
l'implémenter même sur des machines avec des architectures
plutôt bizarre, au moins aux normes d'aujourd'hui. Donc, par
exemple, la norme C++ ne reconnaît même pas l'existance des
répertoires, étant donné qu'il existe des systèmes qui ne les
ont pas.)

Je sais aussi que la plupart des gestionnaires de fenêtres,
aussi bien Windows que KDE, CDE, etc. sous X, ont un système
d'associer des actions à des types de fichiers, où en général
le « type », c'est déterminé par le suffixe du nom du fichier.


la plupart font cela pour la même raison (l'absence de ressource qui
permet de typer les données); ainsi un .txt sera toujours ouvert par la
même appli enregistrée pour gérer cette extension - pour comparaiso n,
MacOS enregistre le type (text, jpeg, etc, y compris propriétaire) et un
identifiant d'application, on peut dès lors avoir des fichiers texte A
ouverts par l'application bloc-notes A et des fichiers texte B ouverts
par une autre application B (tandis que les extensions ne servent à
rien; ne servaient MacOS X a du les hériter de BSD).


Je me démande si MacOS n'y va pas trop loin. Je veux bien que le
fichier enregistre le type d'application dont il a besoin, par
exemple, un éditeur de texte. Mais je veux bien que ce soit moi
qui le choisi ; actuellement, sur ma machine Windows, les
fichiers .html sont ouverts avec Firefox et non IE, et les
fichiers .cc/.cpp/etc. avec gvim, et non Visual Studios.

Mais ici, il
s'agit des informations générales, et non propre à chaque
fichier. Est-ce que ça a quand même un rapport ?)


oui et non; cette extension (sur WinXXX, certains linux, ...) sert
d'identifiant unique du type de fichier, certaines de ces extensions
sont assez répandues, quasi-normalisées (.txt, .jpg, ...) pour permet tre
un traitement systématique du contenu du fichier;


Oui et non. Une information si le .txt contient du UTF-8 ou du
ISO 8859-1 ne serait pas mal, par exemple.

mais même dans ce cas
il peut être simple de générer à la volée les informations sp écifiques
d'un fichier (extraire le tag FFFEh d'un JPEG ou les infos plus riches
d'un JP2) ou impossible de déduire quoique ce soit, quelles infos tirer
d'un fichier texte mis à part le nombre de mots ?


L'encodage. À divers moments dans la passée, j'ai été amené à
écrire des fonctions qui essaient de « déviner » l'encodage
d'un fichier de texte, à partir des premiers 512/1024 octets. Si
les differents encodages sont limités, et les contenus des
fichiers assez typiques, on y arrive 95% des fois. Mais on
aimerait bien couvrir les autres 5%, et ne pas se planter sur
des fichiers vraiment bizarres.

[...] Et bien que je me sers du compilateur VC++, je ne
sais pas encore comment invoquer le débogueur.


F5 pour lancer l'appli sous controle debug (si le project est en mode
debug); puis F10 / F11 pour tracer.


Quel « project » ? J'ai un répertoire avec un tas de fichiers
.cc, et un fichier make. Un fichier make qui exige GNU make,
d'ailleurs. (Ce n'était pas facile à y arriver, mais... j'ai
mon hièrarchie sous Linux, montée sous Windows à travers Samba.
J'invoque make depuis la ligne de commande sous Windows, et avec
le même fichier make, et les mêmes sources, que j'utilise avec
g++ sous Linux ou Sun CC sous Solaris, je compile avec VC++ sous
Windows. Tout au plus j'ai quelques répertoires qui contient des
informations propres à chaque système, que j'inclus en fonction
d'un fichier spécifique au système, dont le nom est construit
dans le fichier make à partir de la commande :
host=$(shell uname -n)
include $(buildRoot)/Site/$(host)/site.mk
.) Et quand j'invoque le make, il s'arrange pour faire l'édition
de liens avec des bibliothèques générées à partir des sources
dans d'autres répertoires.

Quand j'ai un crash du programme, le système me donne bien
l'option d'entrer dans le débogueur. Mais là, je n'ai que du hex
et de l'assembleur, et je ne sais pas entrer dans le débogueur
sans que le programme crashe. Ce ne sont pas des projets
développés sous Visual Studios, mais des portages du code
développé originalement sous Unix ou sous Linux.

[...]
Et qu'est-ce
que tu entends par gérer deux flux pour un fichier ?


2 sources de contenu; faire comme si le fichier était 2 sous-fichiers,
les 2 étant distincts, on peut ouvrir / modifier l'un sans toucher l'au tre.


Comme si un fichier était un répertoire, en somme.
(Techniquement, je n'en vois pas la différence, même si
l'utilisation n'en est pas la même.)

toutes ces considérations nous amènent largement hors chartre,


Tout à fait, mais j'avoue qu'elles éveillent ma curiosité.
D'autant plus qu'après plus de quinze ans exclusivement sous
Unix, je suis de plus en plus amené à régarder d'autres
systèmes.

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
John Deuf
Tu as dis dans ton message news:458c5b81$0$25929$

"le file system windows ne sait pas (nativement) gérer 2 flux pour un
fichier."

C'est faux.
Le file system windows sait nativement gérer 2 flux pour un fichier.


À partir de là, ça ne sert à rien d'écrire 3 pages pour tenter une
pirouette, parce qu'au lieu de sauver ta fierté, tu te ridicules
publiquement encore davantage.
Et personnellement, ce genre de joutes stériles ne m'intéressent pas.
Bonne soirée.

--
John Deuf
Avatar
Sylvain
John Deuf wrote on 01/01/2007 19:47:
Tu as dis dans ton message news:458c5b81$0$25929$

"le file system windows ne sait pas (nativement) gérer 2 flux pour un
fichier."


en effet.

C'est faux.
Le file system windows sait nativement gérer 2 flux pour un fichier.


le système NTFS (pas le "fs windows", pour ton info, il y a, au moins,
sous windows FAT12, FAT16, FAT32, NTFS, sans parler de tous les systèmes
pour CD/DVD) gère des pseudo-flux (pas **2** clairement définis, autant
de merdiers que tu en veux!)

donc, mon point est exact, et répéter que cela ne rencontre pas ce que
tu crois savoir portant sur on ne sait quoi (mais pas mon point) ne sert
pas à grand chose.

À partir de là, ça ne sert à rien d'écrire 3 pages pour tenter une
pirouette, parce qu'au lieu de sauver ta fierté, tu te ridicules
publiquement encore davantage.


quelle niaiserie !!!!!!!!!!!!!!!!!!
tu postes pour la fierté toi ? t'as des problèmes avec le ridicule si
parfois tes lecteurs commentent autre chose que ce dont tu parles ?
excuses, moi j'ai laissé cela à la cour du primaire.

Et personnellement, ce genre de joutes stériles ne m'intéressent pas.


ce que tu manifestes par cette inutile couche supplémentaire ?
touche-pipi du début à la fin tout ça!!

Sylvain.

Avatar
Sylvain
James Kanze wrote on 01/01/2007 17:36:

Voilà ce qui m'explique aussi le nom. J'avais entendu parler de
cette possibilité pour les fichiers .exe sous Windows, mais je
ne le voyais pas réelement comme quelque chose de généralisable.
Au fond, je le concevais comme une partie du programme, mais une
partie qui n'a pas été traduite en langage machine.


c'est en effet une caractéristique, car c'est généralement pas du code
exécutable (la aussi seul - à ma connaissance - Mac OS définisait des
resource code, une extension (grahique par exemple) du système pouvant
se présenter comme un fichier contenant, par exemple, une resource de
type 'WDEF' lorsqu'elle contient un code dessinant une fenêtre (une
"window definition"), le système s'auto-patchant avec le code de cette
resource.

hormi cette anecdote, les resources d'aujourd'hui sont des quasi-POD,
elles sont stockées comme dumpées sans description explicite de la
structure hormi le type de la resource (eg 'MENU', 'STRING', ...).

Mais je ne l'envisagais qu'étant des données qu'utilisent le
programme même. Si j'ai bien compris, ces « resource fork »
peuvent aussi contenir des méta-informations, qui n'intéressent
pas le programme même (surtout qu'elles s'attachent à des
fichiers qui ne sont pas des programmes), mais plutôt aux
programmes qui manipulent le fichier.


oui pour un (vrai) resource fork, comme pour le BLOB de ressources
attachées à un binaire. une meta-information évidente est par exemple
l'icone sous lequel le fichier est représenté par un gestionnaire de
fichiers.

Et évidemment, ça se laisse facilement *simuler* sous Windows ou
sous Unix [...]


on peut le simuler, les solutions ne manquent pas; on peut aussi
dépasser le vieux paradigme des "fichiers plats" (type plain text) comme
par exemple des formats structurés comme XML; cela apporte souvent une
meilleur réponse pour les documents de données.

en l'absence, en effet ...

[...] chaque programme fait à sa guise, et les
programmes généralistes (genre copy) n'y voit rien, et ne savent
pas traiter les informations supplémentaires.

Et plus, Windows
a ajouté le « register », qui éloigne les informations encore
plus d'où on veut les avoir.)


windows a inventé le registre pour ces besoins propres; des développeurs
ont trouvé génial d'aller y même tout et n'importe quoi pour s'éviter la
peine de gérer leurs fichiers de paramètres; je ne me rappelle pas d'une
évangélisation forcenée de MS pour faire cela (même si les classes MFC,
squelette d'applications codées à la souris, stockent justement les
paramètres dans le registre).

tout développeur a encore la possibilité et le droit (s'il s'en donne la
peine) de gérer son propre .parameters (ou autre).

note que MS encourage maintenant de stocker les paramètres applicatifs
dans un dossier prévu pour; cela ne change pas grand chose si les
développeurs ne se disciplinent pas.

[...]
Je me démande si MacOS n'y va pas trop loin. Je veux bien que le
fichier enregistre le type d'application dont il a besoin, par
exemple, un éditeur de texte. Mais je veux bien que ce soit moi
qui le choisi ; actuellement, sur ma machine Windows, les
fichiers .html sont ouverts avec Firefox et non IE, et les
fichiers .cc/.cpp/etc. avec gvim, et non Visual Studios.


ce type de gestion n'est pas confusante pour l'utilisateur, un fichier a
pour attribut son type (généralement constant) et un créateur, ce
créateur correspond à l'appli initialement créé pour la création (et si
j'utilise telle appli pour créer un document, je voudrais surement
l'utiliser aussi pour le modifier) ou celui d'une autre appli ayant
réengistré le fichier après modif., dans ce cas j'ai explicitement
ouvert le fichier avec cette 2nd appli (je n'ai pas pu double-cliquer
dessus).

oui et non; cette extension (sur WinXXX, certains linux, ...) sert
d'identifiant unique du type de fichier, certaines de ces extensions
sont assez répandues, quasi-normalisées (.txt, .jpg, ...) pour permettre
un traitement systématique du contenu du fichier;


Oui et non. Une information si le .txt contient du UTF-8 ou du
ISO 8859-1 ne serait pas mal, par exemple.


j'entendais pour déterminer quel type de traitement est réalisable,
parce que en phase avec les questions / attentes types de l'utilisateur,
par exemple "quelle est la taille en pixels de cette image".
tu as raison de souligner que même en terrain a priori balisé il existe
toujours des pièges et exceptions diverses.

[...] Et bien que je me sers du compilateur VC++, je ne
sais pas encore comment invoquer le débogueur.


F5 pour lancer l'appli sous controle debug (si le project est en mode
debug); puis F10 / F11 pour tracer.


Quel « project » ? J'ai un répertoire avec un tas de fichiers
..cc, et un fichier make. Un fichier make qui exige GNU make,
d'ailleurs. [...]


là c'est la face nord!
tu peux très facilement débugger un code construit depuis l'IDE via un
projet créé par cet IDE, par contre partir d'un make (et j'imagine un
'make' gnu-like, pas le nmake MS) sera bcp plus ardu; à défaut du
débuggeur de l'IDE tu pourras utiliser 'windbg.exe', dans les 2 cas
(celui de Studio reste utilisable en s'attachant au process) il te
faudra renseigner moultes path vers les src, libs etc et bien sur que
des infos de debug au bon format (COFF ou propriétaire MS) aient été
générées.

Quand j'ai un crash du programme, le système me donne bien
l'option d'entrer dans le débogueur. Mais là, je n'ai que du hex
et de l'assembleur, et je ne sais pas entrer dans le débogueur
sans que le programme crashe. [...]


il peut être plus simple de lancer d'abord le débuggeur puis l'appli
sous son contrôle (avec windbg par exemple) ainsi si l'appli crashe le
debuggeur prendra la contrôle permettant d'auditer (la encore sous
réserve de fournir tous les path et de disposer d'info de débug, sinon
c'est dump asm strict).

j'essayerais bien le manip, mais moi c'est pour l'install propre de gcc
que je coince :)

Sylvain.



Avatar
James Kanze
Sylvain wrote:
John Deuf wrote on 01/01/2007 19:47:
Tu as dis dans ton message news:458c5b81$0$25929$

"le file system windows ne sait pas (nativement) gérer 2 flux pour un
fichier."


en effet.


Et pour ne pas être hors chartre ici : les flux C++ ne savent
pas accéder à des « sous-fichiers », branches, forks ou
quoiqu'ils s'appellent. (Je n'aime pas trop la façon que tu as
formulé l'énoncée. Pour un naïf comme moi, quand je lis le mot
« flux » dans ce forum, j'entends automatiquement un istream
ou un ostream -- ou vraiment à la rigueur, un FILE*.)

C'est faux.
Le file system windows sait nativement gérer 2 flux pour un fichier.


le système NTFS (pas le "fs windows", pour ton info, il y a, au moins,
sous windows FAT12, FAT16, FAT32, NTFS, sans parler de tous les systèmes
pour CD/DVD) gère des pseudo-flux (pas **2** clairement définis, auta nt
de merdiers que tu en veux!)


Plus intéressant, dans une contexte professionnelle, les
systèmes de fichiers sont souvent montés depuis une autre
machine. Donc, au travail, la plupart des fichiers sur ma
machine Windows sont en fait des fichiers montés NFS, et chez
moi, je fais énormement utilisation des fichiers montés SMB (à
partir d'une machine Linux). A priori, quand j'entends
« le file system windows », j'entends SMB, de même quand
j'entends « le file system Unix », j'entends NFS (et non le
système local sous Solaris ou sous Linux). La question est donc,
est-ce que SMB supporte c'est méta-informations ? (Je n'en ai
pas vu mention quand j'ai installé Samba, mais je ne me suis
renseigné qu'assez pour que la configuration chez moi marche. Je
ne prétends pas être un expert.)

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
James Kanze
Sylvain wrote:
James Kanze wrote on 01/01/2007 17:36:

Voilà ce qui m'explique aussi le nom. J'avais entendu parler de
cette possibilité pour les fichiers .exe sous Windows, mais je
ne le voyais pas réelement comme quelque chose de généralisable.
Au fond, je le concevais comme une partie du programme, mais une
partie qui n'a pas été traduite en langage machine.


c'est en effet une caractéristique, car c'est généralement pas du c ode
exécutable (la aussi seul - à ma connaissance - Mac OS définisait d es
resource code, une extension (grahique par exemple) du système pouvant
se présenter comme un fichier contenant, par exemple, une resource de
type 'WDEF' lorsqu'elle contient un code dessinant une fenêtre (une
"window definition"), le système s'auto-patchant avec le code de cette
resource.

hormi cette anecdote, les resources d'aujourd'hui sont des quasi-POD,
elles sont stockées comme dumpées sans description explicite de la
structure hormi le type de la resource (eg 'MENU', 'STRING', ...).


Mais ça ne vaut que pour des exécutables, et encore. À une
exception près, chaque fois que j'ai créé quelque chose du
genre, c'était du texte, avec un format plus ou moins genre
.ini. (L'exception, c'était UnicodeData.txt. Un fichier avec
une ligne par caractère Unicode. Au départ, j'avais une classe
qui le lisait, le parsait, et qui rendait les informations
disponibles dans un tableau de struct. Seulement, lire et parser
un fichier de plus d'une millions de lignes, chaque fois qu'on
avait besoin de la moindre information sur les caractères...
Actuellement, j'ai un programme qui génère un image binaire, que
je charge avec mmap. Ce n'est pas que je suis un acharné sur les
performance, mais ça a passé le temps d'accès de prèsqu'une
minute à une dizaine de millisécondes. Mais évidemment, ce n'est
pas portable -- le fichier pour les Sparc ne marchent pas sur
les PC, par exemple.)

Mais je ne l'envisagais qu'étant des données qu'utilisent le
programme même. Si j'ai bien compris, ces « resource fork »
peuvent aussi contenir des méta-informations, qui n'intéressent
pas le programme même (surtout qu'elles s'attachent à des
fichiers qui ne sont pas des programmes), mais plutôt aux
programmes qui manipulent le fichier.


oui pour un (vrai) resource fork, comme pour le BLOB de ressources
attachées à un binaire. une meta-information évidente est par exemp le
l'icone sous lequel le fichier est représenté par un gestionnaire de
fichiers.


Encore, c'est le genre de chose où je verrais plutôt une
méta-information associée au type du fichier, et non au fichier
même. Avec peut-être des exceptions.

[...]
Et plus, Windows
a ajouté le « register », qui éloigne les informations encore
plus d'où on veut les avoir.)


windows a inventé le registre pour ces besoins propres; des développe urs
ont trouvé génial d'aller y même tout et n'importe quoi pour s'év iter la
peine de gérer leurs fichiers de paramètres; je ne me rappelle pas d' une
évangélisation forcenée de MS pour faire cela (même si les classe s MFC,
squelette d'applications codées à la souris, stockent justement les
paramètres dans le registre).


Il est là, il est accessible, il servira:-). Même si la
documentation dit de ne pas le faire. C'est pourquoi C++ a
ajouté le private.

tout développeur a encore la possibilité et le droit (s'il s'en donne la
peine) de gérer son propre .parameters (ou autre).


La solution que j'utilise sous Unix, c'est en général d'avoir
trois fichiers de config : un dans un répertoire .../lib, avec
les parties du programme que j'aurais voulu garder dans une
forme textuelle, mais auxquelles d'autres n'ont normalement pas
le droit de toucher, un deuxième dans /etc/..., pour les aspects
de configuration propres au système où le programme est
installé, et un troisième dans $HOME, pour la configuration
propre à chaque utilisateur. Un de ces jours, j'apprendrais les
équivalents sous Windows (mais a priori, les propreties
associées au fichier exécutable convient parfaitement pour le
premier).

note que MS encourage maintenant de stocker les paramètres applicatifs
dans un dossier prévu pour; cela ne change pas grand chose si les
développeurs ne se disciplinent pas.


C'est le poids de l'histoire. Je n'ai abandonné la limite de
huit caractères sur un nom de répertoire (et huit + trois pour
un nom de fichier) qu'il y a quelques mois, au moins dans ma
bibliothèque à moi:-).

[...]
Je me démande si MacOS n'y va pas trop loin. Je veux bien que le
fichier enregistre le type d'application dont il a besoin, par
exemple, un éditeur de texte. Mais je veux bien que ce soit moi
qui le choisi ; actuellement, sur ma machine Windows, les
fichiers .html sont ouverts avec Firefox et non IE, et les
fichiers .cc/.cpp/etc. avec gvim, et non Visual Studios.


ce type de gestion n'est pas confusante pour l'utilisateur, un fichier a
pour attribut son type (généralement constant) et un créateur, ce
créateur correspond à l'appli initialement créé pour la créatio n (et si
j'utilise telle appli pour créer un document, je voudrais surement
l'utiliser aussi pour le modifier) ou celui d'une autre appli ayant
réengistré le fichier après modif., dans ce cas j'ai explicitement
ouvert le fichier avec cette 2nd appli (je n'ai pas pu double-cliquer
dessus).


Ça dépend. Tu supposes que c'est la même personne qui crée et
qui modifie. En ce qui concerne les programmes (y compris le
html), c'est rarement le cas. Et je ne sais pas si tu serais
content d'être obligé à installer gvim et l'utiliser, juste
parce que tu te sers d'une bibliothèque C++ que j'aurais écrit.

oui et non; cette extension (sur WinXXX, certains linux, ...) sert
d'identifiant unique du type de fichier, certaines de ces extensions
sont assez répandues, quasi-normalisées (.txt, .jpg, ...) pour per mettre
un traitement systématique du contenu du fichier;


Oui et non. Une information si le .txt contient du UTF-8 ou du
ISO 8859-1 ne serait pas mal, par exemple.


j'entendais pour déterminer quel type de traitement est réalisable,
parce que en phase avec les questions / attentes types de l'utilisateur,
par exemple "quelle est la taille en pixels de cette image".
tu as raison de souligner que même en terrain a priori balisé il exis te
toujours des pièges et exceptions diverses.


Je comprends bien. J'ai dit ça surtout pour rappeler un peu ses
limitations (qui sont en partie historique).

[...] Et bien que je me sers du compilateur VC++, je ne
sais pas encore comment invoquer le débogueur.


F5 pour lancer l'appli sous controle debug (si le project est en mode
debug); puis F10 / F11 pour tracer.


Quel « project » ? J'ai un répertoire avec un tas de fichiers
..cc, et un fichier make. Un fichier make qui exige GNU make,
d'ailleurs. [...]


là c'est la face nord!
tu peux très facilement débugger un code construit depuis l'IDE via un
projet créé par cet IDE, par contre partir d'un make (et j'imagine un
'make' gnu-like, pas le nmake MS) sera bcp plus ardu; à défaut du
débuggeur de l'IDE tu pourras utiliser 'windbg.exe', dans les 2 cas
(celui de Studio reste utilisable en s'attachant au process) il te
faudra renseigner moultes path vers les src, libs etc et bien sur que
des infos de debug au bon format (COFF ou propriétaire MS) aient ét é
générées.


Je note windbg.exe -- c'est déjà un début. Mais le problème, je
crois bien, c'est effectivement comment dire au débogueur où se
trouver toutes les informations dont il a besoin. (Je crois
qu'elles y sont, quelque part ; je donne les options à cl.exe
pourqu'il en génère un max. Et je constate que j'ai des fichiers
vc80.pdb partout après un build, or qu'ils n'y étaient pas
avant.)

Quand j'ai un crash du programme, le système me donne bien
l'option d'entrer dans le débogueur. Mais là, je n'ai que du hex
et de l'assembleur, et je ne sais pas entrer dans le débogueur
sans que le programme crashe. [...]


il peut être plus simple de lancer d'abord le débuggeur puis l'appli
sous son contrôle (avec windbg par exemple) ainsi si l'appli crashe le
debuggeur prendra la contrôle permettant d'auditer (la encore sous
réserve de fournir tous les path et de disposer d'info de débug, sinon
c'est dump asm strict).


J'essaierai à l'occasion. Le problème, effectivement, va être
les paths. Je suppose que les informations dont il a besoin se
trouvent dans ces vc80.pdb. Dont j'ai actuellement 66.

j'essayerais bien le manip, mais moi c'est pour l'install propre de gcc
que je coince :)


J'avoue que je n'ai jamais essayé d'installer sous Windows. Les
versions récentes de VC++ sont assez bien pour que ça ne vaut
pas la peine. Sinon : CygWin et MinWG ont des versions
préfaites ; j'utilise la version MinWG de GNU make, parce que
celle que j'ai essayé d'installer moi-même ne marchait pas. (Au
moins d'être vraiment un habitué de Unix, comme moi, je
conseillerais MinWG comme environement Unix. C'est de loin le
plus leger, et d'après ce que j'ai vu, le plus fiable. Moi-même,
pour avoir un environement un peu plus Unixien, je me sers de
UWin pour l'environement de base, et MinWG pour les outils de
développement, genre GNU make, flex et bison.)

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34




Avatar
Sylvain
James Kanze wrote on 01/01/2007 23:50:

Et pour ne pas être hors chartre ici : les flux C++ ne savent
pas accéder à des « sous-fichiers », branches, forks ou
quoiqu'ils s'appellent.


et à peine les AP propriétaires MS, c'est dire s'ils sont intéressants.

(Je n'aime pas trop la façon que tu as
formulé l'énoncée. Pour un naïf comme moi, quand je lis le mot
« flux » dans ce forum, j'entends automatiquement un istream
ou un ostream -- ou vraiment à la rigueur, un FILE*.)


je suis d'accord sur le fond - j'ai utilisé initialement 'flux' (et non
'stream' connu comme un nom de classe) mais cela reste imprécis; 'fork'
me parle plus ... mais peut être à moi seul.

Plus intéressant, dans une contexte professionnelle, les
systèmes de fichiers sont souvent montés depuis une autre
machine.


hmm "souvent" ... c'est vrai si tu travailles en "multi-hétérogène à
l'ancienne" (ie accès physique direct), c'est assez rare aujourd'hui,
non ? ie tu ne montes pas directement les disques de quelqu'un d'autre,
tu y accèdes via des systèmes de partage de fichiers (comme NFS de SUN
ou "open" à la Samba); ces systèmes sont nécessairement détachés des
particularités du système de fichier source - ils ne cherchent ni à les
émuler ni à les supporter dans leurs intimes détails.

Donc, au travail, la plupart des fichiers sur ma
machine Windows sont en fait des fichiers montés NFS, et chez
moi, je fais énormement utilisation des fichiers montés SMB (à
partir d'une machine Linux).


si tu veux un beau serveur NFS pour chez toi aussi, j'ai une superbe
Sparc 2 à 0 euros (hors port).

A priori, quand j'entends
« le file system windows », j'entends SMB, de même quand
j'entends « le file system Unix », j'entends NFS (et non le
système local sous Solaris ou sous Linux). La question est donc,
est-ce que SMB supporte c'est méta-informations ?


SMB, comme son nom l'indique, traite de l'échange, en "message block",
entre machines pas, là non plus, des particularités des partitions
windows; de plus même s'il voulait essayer de fournir au client une
émulation d'un fichier créé sur NTFS, le serveur aurait toute peine à
lui fournir les informations (encore moins les API) car cela n'existe
pas en soi: on ne peut savoir (sauf via mode essai / échec) si un stream
"pifLeChien" ou "5Q30lsldxJoudresxAaaqpcawXc" existe ou pas sur un
fichier hébergé en NTFS; on ne peut pas non plus (simplement /
directement) énumérer ces flux secondaires s'ils existent.

que serait alors le "support" que tu évoques ?
si la question a trait aux fonctions pour le développeur, celui-ci peut
tenter d'ouvrir via une API pathname-based un fichier "toto.txt::$DATA",
le code client verra bien le contenu de "toto.txt", on pourra tenter
d'ouvrir "toto.txt:pifLeChien" et peut être verra-t-on un second flux de
donnée.

si la question a trait à la façon dont le disque serveur est
"visiblement monté" par le système client, je pense que l'on rencontrera
autant de variantes que les développeurs de ces systèmes (notamment
graphiques) on voulu en mettre; si une partition windows est monté sur
linux, l'utilisateur final voudra voir des attributs "owner / group /
public", comment simuler cela alors que soit rien n'existe (FATxx) soit
une tripoté d'utilisateur et/ou groupes peuvent être définis (ACL de
NTFS) ? comment, dans le même esprit, rendre sous KDE l'onglet 'Résumé'
de windows si ce KDE n'ambitionne pas (seulement) de multiplier les
panels à la con qui ne servent à rien - ou plus formellement si les
principes de son IHM se rencontrent pas ce type de présentation ?
la question n'est pas tant "ai-je accès à l'info" que "que faire de
cette info" ...

Sylvain.

Avatar
Serge Paccalin
Le dimanche 31 décembre 2006 à 21:08:24, Sylvain a écrit dans
fr.comp.lang.c++ :

pour la majorité des OS, dont WinXXX, les ressources sont simplement
collées à la fin des données. pour un exec. tjrs sous WinXXX les
ressources d'IHM telles menus, fenetres, dialogues et 'version' sont
ainsi collées au bout du fichier.


Non. Les ressources d'un exé sont dans une section de cet exé dûment
déclarée (.rsrc), parmi les autres sections (.code, .edata, .idata,
.bss, etc.)

--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Pour bien répondre avec Google, ne pas cliquer
-'(__) « Répondre », mais « Afficher les options »,
_/___(_) puis cliquer « Répondre » (parmi les options).

Avatar
Sylvain
Serge Paccalin wrote on 02/01/2007 16:01:
Le dimanche 31 décembre 2006 à 21:08:24, Sylvain a écrit dans
fr.comp.lang.c++ :

pour la majorité des OS, dont WinXXX, les ressources sont simplement
collées à la fin des données. pour un exec. tjrs sous WinXXX les
ressources d'IHM telles menus, fenetres, dialogues et 'version' sont
ainsi collées au bout du fichier.


Non. Les ressources d'un exé sont dans une section de cet exé dûment
déclarée (.rsrc), parmi les autres sections (.code, .edata, .idata,
..bss, etc.)


je suis entièrement d'accord - elles ne sont pas du tout "collées" comme
peuvent l'être les tags d'un mp3; toutefois ce ng n'était pas le lieu de
l'analyse fine de la structure d'un .exe selon MS et je me suis autorisé
ce raccourci compatible avec l'objet de la discussion en cours.

Sylvain.


1 2 3