Comment obtenir la longueur d'un fichier texte ouvert par une autre application

cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010 - 8 sept. 2010 à 22:00
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 10 sept. 2010 à 23:56
J'ai une application qui lance un processus d'analyse des fichiers vidéo et qui écrit un fichier log.
Si le fichier vidéo est correct ou s'il y a seulement quelques problèmes de structures, je n'ai pas de problème.
Si le fichier vidéo est vraiment corrompu, l'analyse prend trop de temps et le fichier log fini par être plus gros que le fichier vidéo. Et certain vidéo vont jusqu'à 12G.

Comment obtenir la longueur du fichier log qui est en cours d'écriture par le processus d'analyse. Ce fichier n'est fermé que lorsque l'analyse est terminée.

21 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 sept. 2010 à 09:11
Pas bonjour non plus

En VB6, il y avait une instruction.
Si tu avais ouvert un fichier avec l'index de fichier 1, il suffisait d'utiliser LOF(1)
LOF : Length Of File

Regarde s'il existe un équivalent sous .Net

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
9 sept. 2010 à 14:17
Bonjour Jack,
effectivement cette commande existe mais elle me donne toujours la même réponse peut importe quand j'exécute la commande. Elle me donne la grosseur du fichier lors de la dernière sauvegarde et mais le fichier que j'interroge est toujours en traitement par un processus externe à VB.

je refait un autre test pour vérifier.
Merci
Autre idée ???
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 sept. 2010 à 15:38
l'application en question génère t'elle des ecritures dans une fenetre de type Console ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
9 sept. 2010 à 17:29
Bonjour Renfield,
l'application (MpegParse) génère un fichier log (.txt)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
9 sept. 2010 à 17:50
Bonjour,
je ne peux pas faire mon test avant demain après-midi.
donc je vous reviens pour les résultats.

Il faut que je vérifie si le fichier généré est en mode partage ou protégé.
S'il est protégé, il va falloir trouvé une autre méthode...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 sept. 2010 à 17:52
aurais tu un lien ou l'on peut telecharger ce soft ?

on peut peut etre générer les logs ailleurs / moins detaillées....

ou récupérer le texte via un Pipe (StandardOutput)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
9 sept. 2010 à 19:43
Bonjour Renfield,
MpegParse fonctionne seulement avec un decodeur mpeg Stradis ...
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
9 sept. 2010 à 20:04
Bonjour,
le fichier .txt généré par le processus n'est pas accessible ... not share.

message erreur : déjà ouvert par une autre application...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 sept. 2010 à 20:30
Mes questions n'ont pas ete comprises ? je veux dire... veux tu que je les pose autrement ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
9 sept. 2010 à 20:59
Bonjour Renfield,
- récapitulation : l'application MpegParse fonctionne seulement avec un decodeur Stradis et génère un log d'analyse (.txt)
le fichier txt ne peut être ouvert par une autre application en même temps.

je pourrais t'envoyer une copie de l'application mais on ne peux pas attacher de fichier
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
9 sept. 2010 à 21:26
Bonjour Renfield,
j'ajoute un aperçu de la liste de paramètres de MpegParse ainsi que la commande utilisée.
---------------------

C:\MpegparseSD>mpegparse
MPEG Parser, Version 1.31, Copyright 2001-2005 Stradis, Inc. Atlanta, Georgia
All Rights Reserved World Wide.
usage: MpegParse <-switches> filename

switches:
-cc:fn Extract Closed Caption to File (stream order)
-ccr:fn Extract Closed Caption to File (temporal order)
-cld Clear Low Delay Bit
-pa Print Audio Statistics
-ppcr Print PCR Statistics
-pv Print Video Statistics
-rta Re-time audio from first PTS
-rta=n.n Re-time audio starting with n.n
-rts Re-time SMPTE time stamps
-rts=<+/->xx:xx:xx.xx
Re-time SMPTE time stamps starting with xx:xx:xx.xx
use + to force drop frame, - to remove drop frame
-rtv=n.n Re-time video starting with n.n
-scg Set first GOP to closed GOP
-sog Set first GOP to open GOP
-select Select Program for Transport Stream
-prg:n.a Use Program 'n', 'a'th Audio Stream (0 based) for Transport Stream
-vpes:fn Extract Video PES Stream to File
-apes:fn Extract Audio PES Stream to File
-ves:fn Extract Video Elementary Stream to File
-aes:fn Extract Audio Elementary Stream to File

C:\MpegparseSD>

commande utilisée dans VB:

Shell("cmd.exe /c " & Pathexe & "mpegparse.exe -pv " & chr(34) & OpenFileDialog1.FileName & chr(34) & " > " & chr(34) & pathS & fichier & ".txt" & chr(34), AppWinStyle.Hide)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2010 à 02:54
>

pile poil :

TU demande a rediriger la sortie standard de la console dans un fichier de ton choix...

il est assez simple de modifier ton appel et permettre :
- d'attendre que le convertisseur aies finit son job, tout en ayant la possibilite d'afficher une progression quelconque, ou au moins un message d'attente

- de demander a obtenir un acces (toi seul) en lecture a la sortie standard. Le but de la manoeuvre ? Pouvoir traiter en temps reel les donnees qui se trouvent actuellement dans ton fichier de log.

J'ai un peu de code tout pret, je te le filerai demain. rapidement, de tete, je dirai qu'il fqut utiliser les APIs:

ShellExecuteEx
OpenProcess
WaitForSingleObject
CloseHandle
ReadFile

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
10 sept. 2010 à 14:23
ce que j'ai surtout besoin de savoir c'est de pouvoir suivre la progression de la grosseur du fichier de sortie pour déterminer s'il y a un problème à l'analyse.
Autrement dit si le fichier de sortie atteint 25% de la grosseur du fichier analysé, c'est qu'il y a un problème majeur et que je dois arrêter le processus d'analyse.
Je fait ensuite la vérification du contenu du fichier de sortie une fois l'analyse complétée, qu'il soit bon ou mauvais.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2010 à 15:12
relis ce que je t'ai indiqué, depuis mon tout premier post.

je t'ai proposé un moyen de lire la log à la volée, sans qu'elle ne soit écrite physiquement...

libre à toi de la diriger vers un fichier dans ton programme VB6...

ce sera ainsi TON fichier et tu en connaîtra la taille...

tu sera en mesure d'agir, d'interrompre la conversion, même, si nécessaire...

une fois généré, il te suffira de l'analyser, comme bon te semble

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
10 sept. 2010 à 15:27
d'accord
j'imagine qu'il faut changer premièrement la commande d'appel.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2010 à 15:30
oui. te faut supprimer la redirection actuelle faite via l'operateur >

surtout que Shell, dans du code en .Net, c'est moyen...

voir l'exemple ici :

msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
10 sept. 2010 à 17:19
donc a partir de l'exemple : modifications en gras
' This is the code for the base process
Dim myProcess As New Process()
' Start a new instance of this program but specify the 'spawned' version.
Dim myProcessStartInfo As New ProcessStartInfo(args(0), "spawn") Nom de l'application, arguments
myProcessStartInfo.UseShellExecute = False
myProcessStartInfo.RedirectStandardOutput = True
myProcess.StartInfo = myProcessStartInfo
myProcess.Start()
Dim myStreamReader As StreamReader = myProcess.StandardOutput
' Read the standard output of the spawned process.
Dim myString As String , len as long
Créer une boucle
mystring = myStreamReader.ReadLine()
len=+length(mystring)
Console.WriteLine(myString) à changer pour écrire dans un fichier
tant que mystring <>"" or len>25% fichier analysé
myProcess.WaitForExit()
myProcess.Close()
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 sept. 2010 à 17:23
en gros, oui...


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
10 sept. 2010 à 17:43
merci encore pour ton aide
0
cs_gandalf27 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 10 septembre 2010
10 sept. 2010 à 20:19
cette méthode fonctionne-t-elle aussi pour les applications windows cmd.exe (DOS) ?
0
Rejoignez-nous