Changer l'extension d'un Document avec Object to path

Je reviens à mon premier problème avec une petite base exemple :
https://forums.4d.com/4DBB_Main/x_User/3140774/files/31215370.zip

Comme il s’agit d’une base toute neuve créée en V17.2, l’onglet ‘Compatibilité’ de ses Propriétés est quasi vide.
Elle est censée être Unicode et reconnaître la nouvelle notation objet.

Elle démarre en mode Trace :
1 : dans la méthode ‘Sur ouverture’ quel paramètre passer à Get database parameter pour lire la propriété ‘Utiliser la notation objet pour…’ ?
2 : dans la méthode ‘Document_Extension_Lire’, les 2 modes de notation fonctionnent.
3 : dans la méthode ‘Document_Extension_Modifier’, les 2 modes de notation semblent fonctionner
mais SHOW ON DISK révèle qu’en réalité, l’extension n’a pas été modifiée !

Un défaut dans mon code ?

Bonjour,

la commande Object to path sert uniquement à recréer le path, mais ne modifie pas le l’extension du fichier sur le disque.

Pour modifier l’extension du fichier sur le disque, il faut utiliser la commande COPY DOCUMENT. Dans votre méthode ça donne:

<code 4D>
C_TEXT($1;$adresse) // en $1 l’adresse du fichier à traiter
C_TEXT($2;$ext) // en $2 l’extension à appliquer

$adresse:=$1
$ext:="."+$2

C_OBJECT($ob_Doc)
$ob_Doc:=New object
$ob_Doc:=Path to object($adresse)
$ob_Doc.extension:=$ext

COPY DOCUMENT($adresse;Object to path($ob_Doc);*)
DELETE DOCUMENT($adresse)

$0:=Object to path($ob_Doc)

</code 4D>

Ce code fonctionne:

<code 4D>
$H_Doc:=Open document("";"";Get pathname)

$O:=Path to object(document)
$O.extension:=“toto”

$T_Path:=Object to path($O)

$H_Doc:=Create document($T_Path)
CLOSE DOCUMENT($H_Doc)

</code 4D>

Dans ton $2 tu ajoutes un point à ta nouvelle extension, c’est sûrement la cause du dysfonctionnement

Je pense que tu n’as pas lu la doc jusqu’au bout :wink: (RTFM)

: Doc 4D

Notez que Objet vers chemin manipule uniquement des chaînes de
caractères
. La commande ne vérifie ni la validité du chemin par
rapport à son type, ni l’existence réelle des dossiers et fichiers
sur le disque.

Donc, tu ne fais rien en réel :mrgreen:, si tu veux changer quelque chose, il faut rajouter un https://doc.4d.com/4Dv17/4D/17.2/DEPLACER-DOCUMENT.301-4386202.fr.htmlDEPLACER DOCUMENT>

rajoute cette ligne en position 16 de ta méthode sur ouverture

<code 4D>
DÉPLACER DOCUMENT(Document;$ad_mod)

</code 4D>

C’est vrai que c’est pas évident de devoir faire un déplacer pour renommer et que les petites notes de dernière minute dans la doc sont fréquentes et agacentes :twisted:

Vous pourriez corriger https://forums.4d.com/Post/FR/30182824/0/0/ça> c’est le cas partout dans la doc 4D… :pray: y compris https://doc.4d.com/4Dv17/4D/17.2/DEPLACER-DOCUMENT.301-4386202.fr.htmlcelle-ci> :frowning:

En fait, je cherche précisément à modifier l’extension du document sans le réécrire complètement.
Pour des petits fichiers, le temps perdu est négligeable mais une méthode générique risque d’être un jour utilisée pour un gros fichier ou une multitude de petits fichiers (ce qui fragmenterait le disque dur).

Je crois donc que je vais choisir DEPLACER DOCUMENT;
Effectivement la doc 4D (RTFM :wink: précise :
La commande DEPLACER DOCUMENT déplace ou renomme un document…
J’espère seulement que 4D et Windows renomment simplement sans dupliquer/détruire

Par contre, si j’ai bien compris, utiliser ‘create document’ ou COPY DOCUMENT / DELETE DOCUMENT, réécrit complètement le document.

Seul défaut de DEPLACER DOCUMENT : il ne contribue pas vraiment à mon initiation à la notation objet :mrgreen:
Par ailleurs, pourquoi avoir déclaré obsolète _O_SET DOCUMENT TYPE ?

Apparemment, 4D est tolérant sur le point (ou son absence) dans l’extension affectée par $ob_Doc.extension:=$ext.
Dans mon cas, l’adresse retournée par $adresse:=Object to path($ob_Doc) est identique et correcte mais le fichier n’est toujours pas modifié.

Bonjour,

: Bernard VACHE

Par ailleurs, pourquoi avoir déclaré obsolète _O_SET DOCUMENT TYPE ?
Car c’est déclaré obsolète au niveau des OS et ce n’est pas nouveau. On en parlait déjà dans la doc v14 :
https://doc.4d.com/4Dv14/4D/14.4/Type-document.301-2511832.fr.html

Cordialement,

Merci Olivier.

Il était vraiment temps que je fasse le ménage.

Peux-tu confirmer que DEPLACER DOCUMENT renomme sans réécrire le document si on ne change pas son dossier ?

Bonjour,

: Bernard VACHE

Merci Olivier.

Il était vraiment temps que je fasse le ménage.

Peux-tu confirmer que DEPLACER DOCUMENT renomme sans réécrire le
document si on ne change pas son dossier ?
Oui, c’est ce que dit la doc.
Cependant le problème de fragmentation n’existe plus de nos jours.

Cordialement,

: Olivier DESCHANELS

Cependant le problème de fragmentation n’existe plus de nos jours.

Et il n’y plus de disquettes souples ?
Comment voulez-vous qu’on suive :smiley: ?

Bonjour

: Bernard VACHE
: Olivier DESCHANELS

Cependant le problème de fragmentation n’existe plus de nos jours.

Et il n’y plus de disquettes souples ?
Comment voulez-vous qu’on suive :smiley: ?
Oui, il n’y a plus de disquette souple, ni de floppy.
Aujourd’hui une base de données est sur SSD ou n’est pas. Pour un stockage de masse, si l’on veux de la performance on est sur SSD, si on veut des gros disques à l’ancienne, on est en RAID et on a un bon contrôleur qui gère la fragmentation.

Cordialement,