[Résolu][Basic] Obtenir Informations Fichier (Date Création)

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Schnee
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 03 déc. 2012 21:44

[Résolu][Basic] Obtenir Informations Fichier (Date Création)

Message par Schnee »

Bonjour à tous

Je viens vers vous pour obtenir votre aide en vue de résoudre mon problème.

J'essaye d'obtenir des informations de différents fichiers sous LINUX

Voici le code que j'utilise sous windows qui fonctionne parfaitement: (Grosse partie récupérée ici: http://openoffice-libreoffice.developpe ... s-fichiers) et dans le livre de Monsieur MARCELLY
Le reste je l'ai adapté à ma sauce.

Toutefois, pour l'utiliser au bureau, Mhhhhh, bonne surprise j'avais pas regardé avant que "Scripting.fileSystemObject" était réservé à Windows.

Du coup, n'ayant pas trouvé ma réponse ni sur le forum ni sur internet (ou ayant utilisé des mauvais mots clés :oops: ), serait-il possible de m'aider à me communiquer un lien ou un code me permettant de récupérer les mêmes infos que j'avais avec ce code sous Windows 8)

En vous remerciant par avance

Code : Tout sélectionner

REM  *****  BASIC  *****

Global Prop1 As String, Prop2 As String, Prop3 As String, Prop4 As String, Prop5 As String, Prop6 As String
Global Prop7 As String, Prop8 As String, Prop9 As String, Prop10 As string, Prop11 As String, Prop12 As String
Global DateAncienne As String, DateRecente As String, CheminTemporaire As String

Option Explicit

'*************************************************************************************
'************************ACCES REPERTOIRE CONFIG LIBREOFFICE**************************
'*************************************************************************************
Sub UtiliserPathSettings()
	Dim ps As Object, repertoires As Variant, r As String
	ps = CreateUnoService("com.sun.star.util.PathSettings")
	CheminTemporaire = ConvertToUrl(ps.UserConfig & "/")
End Sub
	
'*************************************************************************************
'***************************CREER FICHIER TEXT POUR ESSAI*****************************
'*************************************************************************************
Sub CreerFichierTextePourEssai

'On charge la bibliothèque Tools
GlobalScope.BasicLibraries.LoadLibrary("Tools")
'On appel la varibale pour obtenir le chemin temoraire pour création du fichier texte
CALL UtiliserPathSettings

Dim CheminFichiervouluUrl As String, F1 As Long
	F1 = FreeFile
	CheminFichiervouluUrl = CheminTemporaire & "Test.txt"
	Open CheminFichiervouluUrl For Output As #F1
		Write #F1, "Mise à jour du listing effectuée le " & Date() & " à " & CDate(Time)
		'Pour (Date Création) et (Date Modification) : Les Cellules seront à modifier en champ date dans la feuille Calc
		Write #F1, "Nom du fichier", "Url du fichier", "Type", "Date Création", "Date Modification", "Taille du fichier"
		CALL ProprietesFichier_GetFile(ConvertFromUrl(CheminFichiervouluUrl))
		Write #F1, Prop11, Prop12, Prop8, DateAncienne, DateRecente, Prop7
	Close #F1
		MsgBox (("Fichier créé avec succès"), 64, "INFORMATION")
		MsgBox (("Voici les informations du fichier:" & Chr(13) & _
				 "Nom du fichier 	: " & Prop11 & Chr(13) & _
				 "Url du fichier 	: " & Prop12 & Chr(13) & _
				 "Type 				: " & Prop8 & Chr(13) & _
				 "Date Création		(A mettre en champ date dans feuille Calc)	: " & DateAncienne & Chr(13) & _
				 "Date Modification	(A mettre en champ date dans feuille Calc)	: " & DateRecente & Chr(13) & _
				 "Taille du fichier	: " & Prop7 & Chr(13)), 64, "INFORMATION")
		'On supprimer à nouveau le fichier que l'on vient de créer pour le test
		
		If 	FileExists (CheminFichiervouluUrl) Then
			Kill CheminFichiervouluUrl
			MsgBox (("Fichier (" & CheminFichiervouluUrl & ") supprimé avec succès"), 64, "INFORMATION")
		Else
			MsgBox (("Fichier (" & CheminFichiervouluUrl & ") non trouvé. Impossible de le supprimer"), 64, "INFORMATION")
		End If
End Sub

'**********************************************************************************************************************************************************************************************************************************
'*************************************************************************************
'************OBTENTION DES INFORMATIONS SUR LE FICHIER - PROPRIETES*******************
'*************************************************************************************
Function ProprietesFichier_GetFile(FichierSelectionne As String)
'Codage permettant de récupérer les proriétés d'un fichier
Dim oObj As Object , Cible As Object, Valeur As Object, Resultat As String
Dim ValeurKo As Double

	oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")  
	Cible = oObj.createInstance("Scripting.fileSystemObject") 
	Valeur = Cible.GetFile(FichierSelectionne) 'Attention, chemin du fichier en ConvertFromUrl

	Prop1 	= Valeur.ParentFolder.Path 'Chemin 
	Prop2 	= Valeur.shortpath 'Chemin Court
	Prop3 	= Valeur.ShortName 'Nom Court
	Prop4 	= CDate(Valeur.DateCreated.Value) 'Date Création
	Prop5 	= CDate(Valeur.DateLastModified.Value) 'Date Dernière Modification
	Prop6 	= CDate(Valeur.DateLastAccessed.Value) 'Date Dernier Accès
	ValeurKo = Valeur.Size / 1024
	Prop7 	= Format(ValeurKo, "00.00") & " Ko" 'Taille Fichier (En Octets)
	Prop8 	= Valeur.Type 'Type Fichier
	Prop9 	= Cible.GetExtensionName(Valeur) 'Extension Fichier
	Prop10 	= Cible.GetBaseName(Valeur) 'Nom Fichier Sans Extension
	Prop11 	= Cible.GetFileName(Valeur) 'Nom Fichier Avec Extension
	Prop12 	= Cible.GetAbsolutePathName(Valeur) 'Chemin Et Nom Complet

'Pour utiliser les fonctions de CALC - Pensez à rajouter Dim oFonction : Dim oFonction As Object
		Dim oFonction As Object, Data(2)
		oFonction = CreateUnoService("com.sun.star.sheet.FunctionAccess")
		
		Data(0) = Valeur.DateCreated.Value
		Data(1) = Valeur.DateLastModified.Value
		Data(2) = Valeur.DateLastAccessed.Value
		DateAncienne = oFonction.callFunction("MIN", Data())
		'Print DateAncienne
		
		Data(0) = Valeur.DateCreated.Value
		Data(1) = Valeur.DateLastModified.Value
		Data(2) = Valeur.DateLastAccessed.Value
		DateRecente = oFonction.callFunction("MAX", Data())
		'Print DateRecente
		
		If 	DateAncienne = "" Then
		DateAncienne = DateRecente
		End If
		'MsgBox "Date Ancienne : " & DateAncienne & CHR(10) & "Date Récente : " & DateRecente
End Function
'Appel de la function : ProprietesFichier_GetFile("C:\Test.txt")
'**********************************************************************************************************************************************************************************************************************************
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Schnee le 26 nov. 2014 17:07, modifié 1 fois.
LibreOffice Version: 6.0.4.2 (Version obligatoire) - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par Dude »

Salut,

Pour obtenir la date de création d'un document, on utilise la propriété DocumentInfo.
Celle-ci contient la structure CreationDate qui donne cette information.
Avatar de l’utilisateur
Schnee
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 03 déc. 2012 21:44

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par Schnee »

Bonsoir Dude

Merci d'avoir pris le temps de me répondre.

J'espère ne pas raconter de bêtises, mais d'après tous les articles que j'ai regardé, il semble que DocumentInfo donne les infos du fichier en cours (Calc par-exemple).
Je vais essayé le code suivant ce soir ou demain au bureau et essayer de l'adapter pour obtenir ces informations mais sur des fichiers tel que des fichiers *.jpg, *.pdf, *.txt etc...

Code : Tout sélectionner

Dim oDoc As Object
Msgbox oDoc.DocumentInfo.ModifyDate.Day
Msgbox oDoc.DocumentInfo.ModifyDate.Month
Msgbox oDoc.DocumentInfo.ModifyDate.Year
Msgbox oDoc.DocumentInfo.ModifyDate.Hours
Msgbox oDoc.DocumentInfo.ModifyDate.Minutes
End Sub 
Merci encore, bonne soirée
LibreOffice Version: 6.0.4.2 (Version obligatoire) - Windows 10
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par Alain de La Chaume »

Bonjour,

En recherchant "date fichier" dans l'aide (par F1) d'AOO j'obtiens entre autres : Gestion des fichiers
qui me propose une liste de fonctions et d'instructions où je trouve :
Fonction FileDateTime [Exécution]
Renvoie une chaîne de caractères contenant la date et l'heure de création ou de dernière modification d'un fichier.
Vérifiez si vous avez la même chose avec LibO.

Bien coOordialement, Alain.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
Schnee
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 03 déc. 2012 21:44

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par Schnee »

Bonjour Alain de la Chaume

Je viens de vérifier sur ma version, mais je ne trouve pas la petite funcion FileDateTim[Execution]

Sinon, j'ai bien l'impression que la solution proposé par Dude ne me donne que les information concernant le document actif et pas des fichiers sélectionné en lien direct ou par un dialogue openfile.

Pour couronner, ils viennent de faire un petit passage de la version 3.5 à la 4.2. Excellent, mais cela faisait déjà des mois que j'essayais de contourner les problèmes pour que tout soit compatible avec cette version, et du coup même la function:

Code : Tout sélectionner

Function GetUserNameAvecPoint() As String
Dim oUserDataAccess As Object
Dim sTemp As String

	'the "Tools" library MUST be loaded at this point
	oUserDataAccess = Tools.Misc.GetRegistryKeyContent("org.openoffice.UserProfile/Data", True)

	With oUserDataAccess
		sTemp = .givenname & "." & .sn
	End With
	
	GetUserNameAvecPoint = LCase(sTemp)
	'Print GetUserNameAvecPoint 'Donne le nom d'utilisateur
End Function
que j'utilisais car Linux Ubuntu remplissait les champs automatiquement donc je pouvais récupérer ma variable du nom d'utilisateur par ce chemin ne fonctionne plus. Avec la nouvelle version adoptée, les champs ne sont plus renseignés.
J'ai bien trouvé des fils de discussion, mais pas de chance, ces derniers s'arrêtent avant de donner la réponse :fou:
Par exemple: https://forum.openoffice.org/fr/forum/v ... es#p238948

Sinon, j'ai bien pris connaissance que : DocumentInfo était pour l'ancienne version lorsque j'ai posé la question et que maintenant je devait utiliser : DocumentProperties.

Voilà, où j'en suis, je continue à chercher et dès que j'ai la réponse, je ne manquerai pas de la poster car à mon avis je ne dois pas être le seul qui cherche cette info.

Petite précision, le but d'obtenir les dates de création et de modifications et que j'explore des répertoires et sous répertoires (qui contiennent des mails) pour les mettre dans un fichier calc avec les liens hypertextes.
Mais il y en a 37 000 juste en 1 an et demi, donc c'est beaucoup trop long pour faire la mise à jour. Du coup, j'ai pensé à faire la mise à jour, mais que des fichiers créés ou modifiés depuis la date de la dernière mise à jour du listing effectuée :marto:

Avec un peu de chance cela va limiter le temps d'exécution de la macro....

Merci en tout cas de m'aider à trouver Les solutions

Bien cordialement

Schnee
LibreOffice Version: 6.0.4.2 (Version obligatoire) - Windows 10
Avatar de l’utilisateur
CanadaDry
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 25 nov. 2014 14:09
Localisation : Laval, QC

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par CanadaDry »

Bonjour,
Schnee a écrit :Je viens de vérifier sur ma version, mais je ne trouve pas la petite funcion FileDateTim[Execution]
Pourtant l'aide de LibreOffice l'affiche : http://help.libreoffice.org/Basic/FileD ... Runtime/fr
Il n'est pas mentionné que cette fonction ait été supprimée.
OpenOffice 4.1.8 Windows 7 Edition Professional
Avatar de l’utilisateur
Schnee
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 03 déc. 2012 21:44

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par Schnee »

Oulala, effectivement, je ne l'ai pas vu dans l'aide, mais j'avais pas trop le temps entre 12h/14h de rechercher sur internet la page d'aide, (je devais faire à manger aux enfants !!!). Du coup effectivement cette fonction fonctionne.

Code : Tout sélectionner

Sub ExempleFileDateTime
'Msgbox FileDateTime(ThisComponent.url)
End Sub
Toutefois le problème n'est résolu qu'à moitié, "Je sais, je suis exigeant :mrgreen: , mais la date qu'il donne correspond à la date de création /modification, serait possible également d'obtenir la date de dernier accès pour comparer les deux et mettre les deux l'un à côté de l'autre :?:

Si jamais vous connaissez encore une petite fonction miracle FileDateTime Access.... :oops:

Merci encore
LibreOffice Version: 6.0.4.2 (Version obligatoire) - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par Dude »

Schnee a écrit :mais la date qu'il donne correspond à la date de création /modification
Sous *N*X, il n'est pas possible de déterminer la date de création d'un fichier.
Le système renvoie 3 dates :
  • ctime pour l'heure à laquelle un changement de droit a été fait
  • atime pour le dernier accès
  • mtime pour les données du fichier qui ont été modifiées
Un langage comme Python permet de récupérer ces informations.
python.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
Schnee
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 03 déc. 2012 21:44

Re: [Basic] Obtenir Informations Fichier (Date Création)

Message par Schnee »

Un grand merci Dude.

Je pense que je vais arrêter de vous embêter avec cette question. Je viens de m'apercevoir qu'ils ont retiré "l’extension ou script" de lecture du langage python, seul le Basic reste à notre disposition. Trop fort. Tout pour simplifier :fou:

Voici l'image :tesfou:
Libreoffice_Modifié.jpg

Il ont très certainement leurs raisons, mais bon, cela ne m'arrange pas du tout :roll:

Merci quand même. Au cas où, un code me parvient un jour pour obtenir ce que je cherche en Basic, je le posterai à la suite. En attendant j'indique le sujet en Résolu et encore :bravo:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 6.0.4.2 (Version obligatoire) - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Basic] Obtenir Informations Fichier (Date Créat

Message par Dude »

Schnee a écrit :Je viens de m'apercevoir qu'ils ont retiré "l’extension ou script" de lecture du langage python
Je ne sais pas qui est ce "ils" mais LibO dispose par défaut de cette option :
_LibO.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
Schnee
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 03 déc. 2012 21:44

Re: [Résolu][Basic] Obtenir Informations Fichier (Date Créat

Message par Schnee »

Dude,

Tu prêches un convaincu, je sais bien. Il s'agit de version modifiée pour la "Sécurité" sans doute :tesfou:

Mais bon, je vais devoir faire avec......

Merci Dude et à bientôt
LibreOffice Version: 6.0.4.2 (Version obligatoire) - Windows 10