Salut
Comment fait on pour lire et modifier les File Summary d'un fichier?
Comme par exemple:
-Titre
- Sujet
- Auteur
- Catégorie
Une idée?
Merci d avance,
Welby
Salut
Comment fait on pour lire et modifier les File Summary d'un fichier?
Comme par exemple:
-Titre
- Sujet
- Auteur
- Catégorie
Une idée?
Merci d avance,
Welby
tu peux jeter un coup d'oeil à cette discussion :
http://www.developpez.net/forums/showthread.php?t=821
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Pour le point "modifier" (vu que c'est celui là que j'ai utilisé)
Le plus simple est de créer une dll en C++/CLI et qui fera le travail.
L'avantage du C++/CLI est qu'on peut faire du C++ tranquillement et que le résultat (la classe SummaryInfoHelper) peut être utilisée directement à partir d'un langage .NET ...
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 #define CLRSTRINGA(name,clr_name) ClrStringA ^ clr_name = gcnew ClrStringA(name); public ref class SummaryInfoHelper { private: static void CopyStrings(CHAR * pDest,LPCSTR pSource,LONG Length) { if(pSource == NULL) ZeroMemory(pDest,Length); else strcpy(pDest,pSource); } static BOOL nativeSetSummaryInfoItem( LPCSTR fileName, LPCSTR title, LPCSTR subject, LPCSTR author, LPCSTR keywords, LPCSTR comments ) { #define STR_BUF_SIZE 1024 WCHAR wcFilename[STR_BUF_SIZE]; IPropertySetStorage *pPropSetStg = NULL; IPropertyStorage *pPropStg = NULL; ZeroMemory(wcFilename,STR_BUF_SIZE); //Convert to unicode mbstowcs(wcFilename, fileName, strlen(fileName )); CHAR p_title[STR_BUF_SIZE]; CHAR p_subject[STR_BUF_SIZE]; CHAR p_author[STR_BUF_SIZE]; CHAR p_keywords[STR_BUF_SIZE]; CHAR p_comments[STR_BUF_SIZE]; #define COPY_STRINGS(a,b) CopyStrings(a,b,STR_BUF_SIZE) COPY_STRINGS(p_title,title); COPY_STRINGS(p_subject,subject); COPY_STRINGS(p_author,author); COPY_STRINGS(p_keywords,keywords); COPY_STRINGS(p_comments,comments); //Get the IPropertySetStorage interface HRESULT rx = StgOpenStorageEx(wcFilename, STGM_READWRITE|STGM_SHARE_EXCLUSIVE, STGFMT_ANY, 0, NULL, NULL, IID_IPropertySetStorage, (void**)&pPropSetStg ); //CREATE summary information, getting an IpropertyStorage. ( AUDREY ) HRESULT rt = pPropSetStg->Create(FMTID_SummaryInformation,NULL,PROPSETFLAG_DEFAULT,STGM_SIMPLE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, &pPropStg); //Tell Windows to set Title,Subject,Author,Keywords and Comments properties PROPSPEC ps[5]; ps[0].ulKind = PRSPEC_PROPID; ps[0].propid = PIDSI_TITLE; ps[1].ulKind = PRSPEC_PROPID; ps[1].propid = PIDSI_SUBJECT; ps[2].ulKind = PRSPEC_PROPID; ps[2].propid = PIDSI_AUTHOR; ps[3].ulKind = PRSPEC_PROPID; ps[3].propid = PIDSI_KEYWORDS; ps[4].ulKind = PRSPEC_PROPID; ps[4].propid = PIDSI_COMMENTS; //Properties values PROPVARIANT pv[5]; pv[0].vt = VT_LPSTR; pv[0].pszVal = p_title;//"The title"; pv[1].vt = VT_LPSTR; pv[1].pszVal = p_subject;//"The subject"; pv[2].vt = VT_LPSTR; pv[2].pszVal = p_author;//"The author of this file"; pv[3].vt = VT_LPSTR; pv[3].pszVal = p_keywords;//"keywords,keywords,keywords"; pv[4].vt = VT_LPSTR; pv[4].pszVal = p_comments;//"Comment"; //Write to file pPropStg->WriteMultiple(5, ps, pv, 0); //Release interfaces in the reverse order in which they where obtained pPropStg->Release(); pPropSetStg->Release(); return TRUE; } public: static void SetSummaryInfo( System::String ^ fileName, System::String ^ title, System::String ^ subject, System::String ^ author, System::String ^ keywords, System::String ^ comments ) { CLRSTRINGA(fileName,_fileName); CLRSTRINGA(title,_title); CLRSTRINGA(subject,_subject); CLRSTRINGA(author,_author); CLRSTRINGA(keywords,_keywords); CLRSTRINGA(comments,_comments); try { nativeSetSummaryInfoItem( _fileName->native_str(), _title->native_str(), _subject->native_str(), _author->native_str(), _keywords->native_str(), _comments->native_str() ); } finally { delete _fileName; delete _title; delete _subject; delete _author; delete _comments; } } };
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
Pourrais-tu m'aider, j'essai de compiler ton code mais ca ne marche pas, j'utilise Dev-C++.
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
Je vien d'essayer avec Visual C++ 2008 Express mais ca marche pas non plus, je me demande bien où est-ce que tu a trouver Visual C++ .Net 2005, j'ai cherché et on dirait qu'il n'est plus téléchargable...
Il te faudrait aussi le Platform SDK
Allez-vous vous décider à apporter plus de précisions lorsque vous dites "ça marche pas" ? quel message d'erreur ? quel problème ?! tsss
Peut être que tout simplement à l'époque de ce code VS 2008 n'était pas encore sortit ... tu va pas me dire que tu crois que VS 2008 a toujours existé ...
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
Bah j'ai au moin 50 erreurs, mais tu pourrais pas m'envoyer le DLL puisque je n'ais pas le necessaire pour compiler cette source (SVP!), comme ca je pourrais l'utiliser directement.
...
Bon par contre pour une raison que j'ignore, les informations n'apparaissent pas dans l'explorateur alors qu'elle semblent avoir été correctement créées. Le pire c'est que ce truc je n'y ai pas touché depuis 1 an et qu'à la base ça marchait à chaque fois ... Quelqu'un pourrai tester ? (tout est dans la pièce jointe).
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
Merci, bon j'ai essayer SummaryInfoTest mais ca bug , C# me renvoi ca:
Impossible de charger le fichier ou l'assembly 'SumaryInfoLib, Version=1.0.3115.40446, Culture=neutral, PublicKeyToken=null' ou une de ses dépendances. Cette application n'a pas pu démarrer car la configuration de l'application est incorrecte. Réinstaller l'application pourrait résoudre ce problème. (Exception de HRESULT : 0x800736B1)
Tu as pensé à installer les runtimes de Visual C++ ? (à défaut, copier les dlls MSVCR et compagnie dans le même dossier ...)
De la vallée du vent ...
Distribution d'applications .NET avec DreamShield
DreamShield, Le site, forum, blog, wiki & Jeux
Mon blog, Cours et tutoriels pour apprendre C#, forum C#, Offres d’emploi développeur C#
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager