Je dois transférer les Summary Information d'un fichier à un autre.
Probleme, je ne peux pas creer de fichier compound. Les 2 fichier
(source et dest) doivent rester des fichier "standard".
J'ai essaye (sans succes jusqu'a present) la methode suivante :
Quelle est la valeur de retour? Le fichier est encore ouvert par ailleurs ou pas? Avec quels droits?
Arnaud
Mon systeme de fichier est bien NTFS, OS = W2K. A ce propos, comment connaitre la version de NTFS ?
Valeur de retour : hr = 0x800300ff, je n'ai trouve aucune valeur de retour y correspondant.
Le fichier est ferme et les droits sont "controle total pour tout le monde"
adebaene
ede wrote:
wrote: > ede wrote: > >>Bonjour à tous, >> >>Je dois transférer les Summary Information d'un fichier à un
autre.
> > >>Probleme, je ne peux pas creer de fichier compound. Les 2 fichier >>(source et dest) doivent rester des fichier "standard". > > > Tu ne peux avoir des "Summary Information" sur un fichier "plat"
que si
> tu utilises un système de fichier NTFS Version 5 ou plus. > > >>J'ai essaye (sans succes jusqu'a present) la methode suivante : >> >> hr = StgOpenStorageEx( >> pFileName, >> STGM_DIRECT | STGM_READWRITE | STGM_SHARE_DENY_WRITE, >> STGFMT_ANY, >> 0, >> NULL, >> NULL, >> IID_IPropertySetStorage, >> reinterpret_cast<void**>(&pPropSetStg)); >> >>sur un fichier cree avec un simple fopen(...). > > Quelle est la valeur de retour? Le fichier est encore ouvert par > ailleurs ou pas? Avec quels droits? > > Arnaud >
Mon systeme de fichier est bien NTFS, OS = W2K. A ce propos, comment connaitre la version de NTFS ?
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/Trou bleShooting/WhichversionofNTFSamIrunning.html Je sais, c'est moche!
Valeur de retour : hr = 0x800300ff, je n'ai trouve aucune valeur de retour y correspondant.
0x800300ff=STG_E_INVALIDFLAG (défini dans WinError.h. Tu peux aussi le trouver avec ErrorLookup) Valeur de retour STG_E_INVALIDFLAG : "Indicates an invalid flag combination in the grfMode pointer; this includes both the STGM_DELETEONRELEASE and STGM_CONVERT flag. "
Si on lit en détail la doc sur grfMode : "If the storage object is opened in direct mode (STGM_DIRECT) with access to either STGM_WRITE or STGM_READWRITE, the sharing mode must be STGM_SHARE_EXCLUSIVE unless the STGM_DIRECT_SWMR mode is specified". Donc, soit tu retires STGM_DIRECT, soit tu requiert un acces exclusif (STGM_SHARE_EXCLUSIVE).
On peut lire aussi dans la doc sur STGM : When the STGM_DIRECT flag is specified, only the following combination of flags may be specified from the access and sharing groups: STGM_READ | STGM_SHARE_DENY_WRITE or STGM_READWRITE | STGM_SHARE_EXCLUSIVE or STGM_READ | STGM_PRIORITY
Faut reconnaitre que j'ai rarement vu une API aussi mal foutue et aussi absconse que celle-ci. Quand on pense que COM est censé être orienté objet!
Arnaud MVP - VC
ede wrote:
adebaene@club-internet.fr wrote:
> ede wrote:
>
>>Bonjour à tous,
>>
>>Je dois transférer les Summary Information d'un fichier à un
autre.
>
>
>>Probleme, je ne peux pas creer de fichier compound. Les 2 fichier
>>(source et dest) doivent rester des fichier "standard".
>
>
> Tu ne peux avoir des "Summary Information" sur un fichier "plat"
que si
> tu utilises un système de fichier NTFS Version 5 ou plus.
>
>
>>J'ai essaye (sans succes jusqu'a present) la methode suivante :
>>
>> hr = StgOpenStorageEx(
>> pFileName,
>> STGM_DIRECT | STGM_READWRITE | STGM_SHARE_DENY_WRITE,
>> STGFMT_ANY,
>> 0,
>> NULL,
>> NULL,
>> IID_IPropertySetStorage,
>> reinterpret_cast<void**>(&pPropSetStg));
>>
>>sur un fichier cree avec un simple fopen(...).
>
> Quelle est la valeur de retour? Le fichier est encore ouvert par
> ailleurs ou pas? Avec quels droits?
>
> Arnaud
>
Mon systeme de fichier est bien NTFS, OS = W2K. A ce propos, comment
connaitre la version de NTFS ?
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/Trou bleShooting/WhichversionofNTFSamIrunning.html
Je sais, c'est moche!
Valeur de retour : hr = 0x800300ff, je n'ai trouve aucune valeur de
retour y correspondant.
0x800300ff=STG_E_INVALIDFLAG (défini dans WinError.h. Tu peux aussi le
trouver avec ErrorLookup)
Valeur de retour STG_E_INVALIDFLAG :
"Indicates an invalid flag combination in the grfMode pointer; this
includes both the STGM_DELETEONRELEASE and STGM_CONVERT flag. "
Si on lit en détail la doc sur grfMode :
"If the storage object is opened in direct mode (STGM_DIRECT) with
access to either STGM_WRITE or STGM_READWRITE, the sharing mode must be
STGM_SHARE_EXCLUSIVE unless the STGM_DIRECT_SWMR mode is specified".
Donc, soit tu retires STGM_DIRECT, soit tu requiert un acces exclusif
(STGM_SHARE_EXCLUSIVE).
On peut lire aussi dans la doc sur STGM :
When the STGM_DIRECT flag is specified, only the following combination
of flags may be specified from the access and sharing groups:
STGM_READ | STGM_SHARE_DENY_WRITE
or
STGM_READWRITE | STGM_SHARE_EXCLUSIVE
or
STGM_READ | STGM_PRIORITY
Faut reconnaitre que j'ai rarement vu une API aussi mal foutue et aussi
absconse que celle-ci. Quand on pense que COM est censé être orienté
objet!
wrote: > ede wrote: > >>Bonjour à tous, >> >>Je dois transférer les Summary Information d'un fichier à un
autre.
> > >>Probleme, je ne peux pas creer de fichier compound. Les 2 fichier >>(source et dest) doivent rester des fichier "standard". > > > Tu ne peux avoir des "Summary Information" sur un fichier "plat"
que si
> tu utilises un système de fichier NTFS Version 5 ou plus. > > >>J'ai essaye (sans succes jusqu'a present) la methode suivante : >> >> hr = StgOpenStorageEx( >> pFileName, >> STGM_DIRECT | STGM_READWRITE | STGM_SHARE_DENY_WRITE, >> STGFMT_ANY, >> 0, >> NULL, >> NULL, >> IID_IPropertySetStorage, >> reinterpret_cast<void**>(&pPropSetStg)); >> >>sur un fichier cree avec un simple fopen(...). > > Quelle est la valeur de retour? Le fichier est encore ouvert par > ailleurs ou pas? Avec quels droits? > > Arnaud >
Mon systeme de fichier est bien NTFS, OS = W2K. A ce propos, comment connaitre la version de NTFS ?
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/Trou bleShooting/WhichversionofNTFSamIrunning.html Je sais, c'est moche!
Valeur de retour : hr = 0x800300ff, je n'ai trouve aucune valeur de retour y correspondant.
0x800300ff=STG_E_INVALIDFLAG (défini dans WinError.h. Tu peux aussi le trouver avec ErrorLookup) Valeur de retour STG_E_INVALIDFLAG : "Indicates an invalid flag combination in the grfMode pointer; this includes both the STGM_DELETEONRELEASE and STGM_CONVERT flag. "
Si on lit en détail la doc sur grfMode : "If the storage object is opened in direct mode (STGM_DIRECT) with access to either STGM_WRITE or STGM_READWRITE, the sharing mode must be STGM_SHARE_EXCLUSIVE unless the STGM_DIRECT_SWMR mode is specified". Donc, soit tu retires STGM_DIRECT, soit tu requiert un acces exclusif (STGM_SHARE_EXCLUSIVE).
On peut lire aussi dans la doc sur STGM : When the STGM_DIRECT flag is specified, only the following combination of flags may be specified from the access and sharing groups: STGM_READ | STGM_SHARE_DENY_WRITE or STGM_READWRITE | STGM_SHARE_EXCLUSIVE or STGM_READ | STGM_PRIORITY
Faut reconnaitre que j'ai rarement vu une API aussi mal foutue et aussi absconse que celle-ci. Quand on pense que COM est censé être orienté objet!
Arnaud MVP - VC
ede
wrote:
ede wrote:
wrote:
ede wrote:
Bonjour à tous,
Je dois transférer les Summary Information d'un fichier à un
autre.
Probleme, je ne peux pas creer de fichier compound. Les 2 fichier (source et dest) doivent rester des fichier "standard".
Tu ne peux avoir des "Summary Information" sur un fichier "plat"
que si
tu utilises un système de fichier NTFS Version 5 ou plus.
J'ai essaye (sans succes jusqu'a present) la methode suivante :
Quelle est la valeur de retour? Le fichier est encore ouvert par ailleurs ou pas? Avec quels droits?
Arnaud
Mon systeme de fichier est bien NTFS, OS = W2K. A ce propos, comment connaitre la version de NTFS ?
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/TroubleShooting/WhichversionofNTFSamIrunning.html Je sais, c'est moche!
Valeur de retour : hr = 0x800300ff, je n'ai trouve aucune valeur de retour y correspondant.
0x800300ff=STG_E_INVALIDFLAG (défini dans WinError.h. Tu peux aussi le trouver avec ErrorLookup) Valeur de retour STG_E_INVALIDFLAG : "Indicates an invalid flag combination in the grfMode pointer; this includes both the STGM_DELETEONRELEASE and STGM_CONVERT flag. "
Si on lit en détail la doc sur grfMode : "If the storage object is opened in direct mode (STGM_DIRECT) with access to either STGM_WRITE or STGM_READWRITE, the sharing mode must be STGM_SHARE_EXCLUSIVE unless the STGM_DIRECT_SWMR mode is specified". Donc, soit tu retires STGM_DIRECT, soit tu requiert un acces exclusif (STGM_SHARE_EXCLUSIVE).
On peut lire aussi dans la doc sur STGM : When the STGM_DIRECT flag is specified, only the following combination of flags may be specified from the access and sharing groups: STGM_READ | STGM_SHARE_DENY_WRITE or STGM_READWRITE | STGM_SHARE_EXCLUSIVE or STGM_READ | STGM_PRIORITY
Faut reconnaitre que j'ai rarement vu une API aussi mal foutue et aussi absconse que celle-ci. Quand on pense que COM est censé être orienté objet!
Arnaud MVP - VC
Merci beaucoup pour cet éclaircissement :) Je creuse un peu et je te tiens au courant. Effectivement, cette API est vraiment tortueuse !
Eric
adebaene@club-internet.fr wrote:
ede wrote:
adebaene@club-internet.fr wrote:
ede wrote:
Bonjour à tous,
Je dois transférer les Summary Information d'un fichier à un
autre.
Probleme, je ne peux pas creer de fichier compound. Les 2 fichier
(source et dest) doivent rester des fichier "standard".
Tu ne peux avoir des "Summary Information" sur un fichier "plat"
que si
tu utilises un système de fichier NTFS Version 5 ou plus.
J'ai essaye (sans succes jusqu'a present) la methode suivante :
Quelle est la valeur de retour? Le fichier est encore ouvert par
ailleurs ou pas? Avec quels droits?
Arnaud
Mon systeme de fichier est bien NTFS, OS = W2K. A ce propos, comment
connaitre la version de NTFS ?
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/TroubleShooting/WhichversionofNTFSamIrunning.html
Je sais, c'est moche!
Valeur de retour : hr = 0x800300ff, je n'ai trouve aucune valeur de
retour y correspondant.
0x800300ff=STG_E_INVALIDFLAG (défini dans WinError.h. Tu peux aussi le
trouver avec ErrorLookup)
Valeur de retour STG_E_INVALIDFLAG :
"Indicates an invalid flag combination in the grfMode pointer; this
includes both the STGM_DELETEONRELEASE and STGM_CONVERT flag. "
Si on lit en détail la doc sur grfMode :
"If the storage object is opened in direct mode (STGM_DIRECT) with
access to either STGM_WRITE or STGM_READWRITE, the sharing mode must be
STGM_SHARE_EXCLUSIVE unless the STGM_DIRECT_SWMR mode is specified".
Donc, soit tu retires STGM_DIRECT, soit tu requiert un acces exclusif
(STGM_SHARE_EXCLUSIVE).
On peut lire aussi dans la doc sur STGM :
When the STGM_DIRECT flag is specified, only the following combination
of flags may be specified from the access and sharing groups:
STGM_READ | STGM_SHARE_DENY_WRITE
or
STGM_READWRITE | STGM_SHARE_EXCLUSIVE
or
STGM_READ | STGM_PRIORITY
Faut reconnaitre que j'ai rarement vu une API aussi mal foutue et aussi
absconse que celle-ci. Quand on pense que COM est censé être orienté
objet!
Arnaud
MVP - VC
Merci beaucoup pour cet éclaircissement :) Je creuse un peu et je te
tiens au courant. Effectivement, cette API est vraiment tortueuse !
Quelle est la valeur de retour? Le fichier est encore ouvert par ailleurs ou pas? Avec quels droits?
Arnaud
Mon systeme de fichier est bien NTFS, OS = W2K. A ce propos, comment connaitre la version de NTFS ?
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/TroubleShooting/WhichversionofNTFSamIrunning.html Je sais, c'est moche!
Valeur de retour : hr = 0x800300ff, je n'ai trouve aucune valeur de retour y correspondant.
0x800300ff=STG_E_INVALIDFLAG (défini dans WinError.h. Tu peux aussi le trouver avec ErrorLookup) Valeur de retour STG_E_INVALIDFLAG : "Indicates an invalid flag combination in the grfMode pointer; this includes both the STGM_DELETEONRELEASE and STGM_CONVERT flag. "
Si on lit en détail la doc sur grfMode : "If the storage object is opened in direct mode (STGM_DIRECT) with access to either STGM_WRITE or STGM_READWRITE, the sharing mode must be STGM_SHARE_EXCLUSIVE unless the STGM_DIRECT_SWMR mode is specified". Donc, soit tu retires STGM_DIRECT, soit tu requiert un acces exclusif (STGM_SHARE_EXCLUSIVE).
On peut lire aussi dans la doc sur STGM : When the STGM_DIRECT flag is specified, only the following combination of flags may be specified from the access and sharing groups: STGM_READ | STGM_SHARE_DENY_WRITE or STGM_READWRITE | STGM_SHARE_EXCLUSIVE or STGM_READ | STGM_PRIORITY
Faut reconnaitre que j'ai rarement vu une API aussi mal foutue et aussi absconse que celle-ci. Quand on pense que COM est censé être orienté objet!
Arnaud MVP - VC
Merci beaucoup pour cet éclaircissement :) Je creuse un peu et je te tiens au courant. Effectivement, cette API est vraiment tortueuse !