Fichier

Louise2311 Messages postés 19 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 21 mars 2007 - 22 juin 2005 à 12:35
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 22 juin 2005 à 16:08
bonjour a tous,
Dans mon appli, je copie un fichier que je supprime apres, seulement quand je le supprime il me dit qu'il est en cours d'utilisation,
y a t'il une commande qui me permette de savor si mon fichier est en cours d'utilisation et qui me renverrais un booléen, ou quelque chose comme ca ??? pour l'instant je ne trouve pas

Merci

8 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
22 juin 2005 à 13:49
Le plus simple je pense serait de traiter le message d'erreur en mettant en place une routine de gestion des erreurs !!!



Private Sub ...

On Error Goto Erreurs



...



Exit Sub

Erreurs:

Select Case Err.Num

Case xxx

MsgBox "L'erreur XXX est survenue, ...", vbOkOnly, "Erreur"

Case Else

...

End Select

End Sub



Cela répond-t-il à ta question, si oui, clique sur le bouton "Accepter"...



Enjoy
0
daetips Messages postés 142 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 10 novembre 2007
22 juin 2005 à 15:09
Bah tu peux regarder ds la liste des processus s'il est actif via son nom.exe, ou une fonction vb tiens:

Public Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Public Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
Public Declare Function CreateToolhelpSnapshot Lib "KERNEL32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Public Declare Function GetCurrentProcess Lib "KERNEL32" () As Long
Public Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Public Declare Function OpenProcess Lib "KERNEL32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Public Declare Function ProcessFirst Lib "KERNEL32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function ProcessNext Lib "KERNEL32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function TerminateProcess Lib "KERNEL32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long



Public Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwflags As Long
szexeFile As String * 260
End Type


Public Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type


Public Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type


Dim lhwndProcess As Long
Dim lExitCode As Long
Dim lRetVal As Long
Dim lhThisProc As Long
Dim lhTokenHandle As Long
Dim tLuid As LUID
Dim tTokenPriv As TOKEN_PRIVILEGES, tTokenPrivNew As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long


Const PROCESS_ALL_ACCESS &H1F0FFF, PROCESS_TERMINAT &H1Const ANYSIZE_ARRAY 1, TOKEN_ADJUST_PRIVILEGES &H20Const TOKEN_QUERY &H8, SE_DEBUG_NAME As String "SeDebugPrivilege"
Const SE_PRIVILEGE_ENABLED = &H2



Public Function Processus(nom_process, Optional killer As Boolean = False) As Boolean
Dim i As Integer
Dim hSnapshot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
Dim Nom(1 To 100)
Dim Num(1 To 100)
Dim nr As Integer
nr = 0
hSnapshot = CreateToolhelpSnapshot(2&, 0&)
If hSnapshot = 0 Then Exit Function
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapshot, uProcess)


Do While r
nr = nr + 1
Nom(nr) = uProcess.szexeFile
Num(nr) = uProcess.th32ProcessID
r = ProcessNext(hSnapshot, uProcess)
Loop
If killer = False Then
For i = 1 To nr
If Split(UCase(Nom(i)), Chr(0))(0) = UCase(nom_process) Then
'If InStr(UCase(Nom(I)), UCase(nom_process)) <> 0 Then
Processus = True
Exit For
End If
Call CloseHandle(hSnapshot)

Next i


Else
For i = 1 To nr
If Split(UCase(Nom(i)), Chr(0))(0) = UCase(nom_process) Then
'If InStr(UCase(Nom(I)), UCase(nom_process)) <> 0 Then
ProcessTerminate (Num(i))
Call CloseHandle(hSnapshot)
Processus = True
Exit For
End If
Call CloseHandle(hSnapshot)
Next i
End If
End Function



Public Function ProcessTerminate(Optional lProcessID As Long) As Boolean
On Error Resume Next


If lProcessID Then
'Give Kill permissions to this process
lhThisProc = GetCurrentProcess

OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle
LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid
'Set the number of privileges to be change
tTokenPriv.PrivilegeCount = 1
tTokenPriv.TheLuid = tLuid
tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
'Enable the kill privilege in the access token of this process
AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded

'Open the process to kill
lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)

If lhwndProcess Then
'Obtained process handle, kill the process
ProcessTerminate = CBool(TerminateProcess(lhwndProcess, lExitCode))
Call CloseHandle(lhwndProcess)
End If
End If
On Error GoTo 0
End Function

Pour l'utiliser c'est:

MsgBox Processus("msnmsgr.exe") 'renvoi true si ouvert
Lret = Processus("msnmsgr.exe", True) 'renvoi true si ouvert+le ferme
if Lret = true then
msgbox "Le processus à été fermé"
end if

Daetips
0
daetips Messages postés 142 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 10 novembre 2007
22 juin 2005 à 15:14
Et tu pourrai l'utiliser comme ca pour ton probleme
Pour l'utiliser c'est:

If Processus("Ton processus.exe") =true then
Processus("msnmsgr.exe", True) 'le ferme
kill("c:\tonpath\tonfichier.exe")
'le processus était ouvert mais on la fermé+supprimé
else
kill("c:\tonpath\tonfichier.exe")
'le fichier n'était pas ouvert et on la supprimé
end if

maintenant si c'est un fichier .txt, ton processus sera notepad.exe par exemple....

@+
Daetips
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
22 juin 2005 à 15:30
Oulà, tu vas pas chercher un peu loin là Daetips ???

lol
0

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

Posez votre question
daetips Messages postés 142 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 10 novembre 2007
22 juin 2005 à 15:36
Bah la source permet de voir si le processus est actif avec possibilité de fermer le processus.
Cependant si quelqu'un a une meilleure solution je suis prenneur :p

@+

Daetips
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
22 juin 2005 à 15:39
Dis, ton fichier, tu le copies comment ??? J'y pense
tout à coup... si tu le copies en l'écrivant via un "Open"... ben faut
le fermer via un "Close" pour pouvoir le supprimer si je dis pas de
conneries !!!
0
Louise2311 Messages postés 19 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 21 mars 2007
22 juin 2005 à 15:44
en fait je pensais plus a une procédure de File ou un truc dans le genre, qui prendrais une ligne et qui me dirait si mon fichier est utilisé ou non....
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
22 juin 2005 à 16:08
Si... regarde peut-être le FSO (File Systèm Object) dans
la MSDN (l'aide du VB)... Lui doit surement faire ce teste à ta
place... Mais je pense que la gestion de l'erreur reste la meilleur
technique!!!
0
Rejoignez-nous