Springen naar inhoud

Gezocht programma met zekere functionaliteit.


  • Log in om te kunnen reageren

#1

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 01 oktober 2010 - 20:33

Ik ben op zoek naar een programma met volgende functionaliteit:
Controleren of een file bestaat, nog in gebruik is en zo neen deze file copyeren en saven op een andere schijf naderhand deze file verwijderen.

Ik heb al wat proberen te zoeken maar ik heb totaal geen idee naar wat ik moet zoeken, iemand enig idee?
Groeten.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 01 oktober 2010 - 23:38

Dat lijkt me wel doenbaar om te schrijven in VBA. Enig vraagje om de haalbaarheid te testen: hoe wil je deze files bepalen? Enumeratie? Manueel ingeven? Alles systematisch laten controleren in een dir?
"C++ : Where friends have access to your private members." — Gavin Russell Baker.

#3

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 02 oktober 2010 - 10:09

Ik ben op zoek naar een programma met volgende functionaliteit:
Controleren of een file bestaat, nog in gebruik is en zo neen deze file copyeren en saven op een andere schijf naderhand deze file verwijderen.

Ik heb al wat proberen te zoeken maar ik heb totaal geen idee naar wat ik moet zoeken, iemand enig idee?
Groeten.

En waarvoor wil je dat programma gebruiken? Het lijkt me dat je eigenlijk iets anders zoekt. Het is namelijk niet eenvoudig om te detecteren of een file nog in gebruik is. Niet alle programma's plaatsen "locks" op files die ze gebruiken.
What it all comes down to, is that I haven't got it all figured out just yet
And I've got one hand in my pocket and the other one is giving the peace sign
-Alanis Morisette-

#4

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 oktober 2010 - 11:11

Dat lijkt me wel doenbaar om te schrijven in VBA. Enig vraagje om de haalbaarheid te testen: hoe wil je deze files bepalen? Enumeratie? Manueel ingeven? Alles systematisch laten controleren in een dir?


Manueel ingeven of files uit bepaalde dir.

En waarvoor wil je dat programma gebruiken? Het lijkt me dat je eigenlijk iets anders zoekt. Het is namelijk niet eenvoudig om te detecteren of een file nog in gebruik is. Niet alle programma's plaatsen "locks" op files die ze gebruiken.


Dit verklaard mss in eens alles, ik doe simulaties waarvan de bestanden erg groot worden. dit programma schrijft zijn resultaat enkel op een welbepaalde schijf, echter deze is maar zo'n 1gb groot.
De output van een simulatie is zo'n 250mb dus na vier is de schijf vol.

Het simuleren duurt ook nog eens tergend lang reken ongeveer op zo'n 5 a 6h voor eentje, waarbij er maar n van de vier procesoren gebruikt wordt als ik nu meerdere simulaties parallel run, ik heb toch vier procesoren dan is het mij al dikwils voorgekomen dat als ik 's morgens opsta (ja want die simulaties laat ik liefst 's nachts bollen) de schijf toch weer niet vol is waardoor mijn simulator gestopt is.

Daarom dat ik dacht de files te controleren en na te kijken of ze door de sim gelockt zijn of dat een andere (ook zelf in te geven) file bestaat want dan weet ik dat de vorige file afgewerkt is deze dan te copyeren en te verwijderen van de eerste schijf.

Iemand enig idee?
Groeten.

#5

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 02 oktober 2010 - 11:31

Op linux zou je met het terminal commando lsof periodiek kunnen kijken. Een python programma om dit te doen lijkt mij niet echt moeilijk te zijn.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#6

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 oktober 2010 - 12:04

Ik was net ook al aan denken dat ik mss gemakelijker zelf iets in een kan steken dat dit kan dan achter zon program te zoeken.
Bvb in matlab zou ik dan nodig hebben:
1)om de zoveel tijd even aandacht (zodaning dat ik niet in een stomme oneindige while loop moet zitten)
2)indien een file bestaat (namelijk de volgende )dan weet ik dat de vorige niet meer in gebruik is lees deze vorige dan==>>
fid = fopen(filname,'r');
A=fscanf(fid,'%c',inf); %
fprintf(fidnew,A,%c);
3)maak nu de oorspronkelijk file gelijk aan niks:
fid = fopen(filname,'w');
fprintf(fid,0);
zoiets? Hoe regel ik dat om de zoveel kijken nog(1)?

Groeten.

#7

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 02 oktober 2010 - 12:17

Bvb in matlab zou ik dan nodig hebben:

Ik ben bang dat matlab zoiets niet kan... ](*,)
Ik denk niet dat matlab locks kan controleren. Grote files kopieren op de manier die je aangeeft lijkt me ook moeilijk, ik denk dat matlab dan eerst de files gaat willen volledig laden, en dat je dus met 500Mb aan overtollige ruimte op je RAM zit.
Misschien beter eens kijken naar Java, python, VB, ...
What it all comes down to, is that I haven't got it all figured out just yet
And I've got one hand in my pocket and the other one is giving the peace sign
-Alanis Morisette-

#8

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 02 oktober 2010 - 12:18

Kan ook met een simpel .bat scriptje lijkt me:
:verplaats
move c:\voorbeeld.doc d:\
if not exist d:\voorbeeld.doc goto verplaats
In theory, there's no difference between theory and practice. In practice, there is.

#9

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 oktober 2010 - 12:35

bij dit bat scriptje hoe zie ik dat de computer het niet nodeloos veel gaat doen? maw hoe is ingebouwd dat het niet alles van mijn procesor vraagt?

Groeten.

#10

mcs51mc

    mcs51mc


  • >250 berichten
  • 470 berichten
  • Ervaren gebruiker

Geplaatst op 02 oktober 2010 - 12:43

In VBA is dat zeker een makkie op voorwaarde dat je "Microsoft Scripting Runtime" gebruikt.
Via Extra\Verwijzingen "Microsoft Scripting Runtime" in de lijst zoeken en aanvinken.

Dan in code

Dim fso As FileSystemObject

Set fso = New FileSystemObject

"hier komt jouw code voorbeeld:"
If fso.FolderExists(txtP1Folder.Text) = False Then

End If

set fso = Nothing



Het object "fso" heeft een hele boel methoden zoals
BuildPath
CopyFile
CopyFolder
FileExists
MoveFile
enz
enz
enz... ...

](*,) eens FileSystemObject

#11

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 oktober 2010 - 15:05

ok bedankt volgend bat filtje werkt al perfect:
:verplaats
move c:\test\test.txt c:\test\test2.txt
CHOICE /C:x /T:x,300 > NUL
if not exist c:\test\test2.txt goto verplaats

nu controleert die om de 5min.
Groeten.

#12

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 02 oktober 2010 - 16:10

Enkele functies verzameld in VB:
Function FileAlreadyOpen(FullFileName As String) As Boolean
' returns True if FullFileName is currently in use by another process
' example: If FileAlreadyOpen("C:\FolderName\FileName.xls") Then...
Dim f As Integer
	f = FreeFile
	On Error Resume Next
	Open FullFileName For Binary Access Read Write Lock Read Write As #f
	Close #f
	' If an error occurs, the document is currently open.
	If Err.Number <> 0 Then
		FileAlreadyOpen = True
		Err.Clear
		'MsgBox "Error #" & Str(Err.Number) & " - " & Err.Description
	Else
		FileAlreadyOpen = False
	End If
	On Error GoTo 0
End Function

Sub FileExists()
Dim FSO
Dim file As String
file = "C:\Test.xls" ' change to match the file w/Path
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FileExists(file) Then
	MsgBox file & " was not located.", vbInformation, "File Not Found"
Else
	MsgBox file & " has been located.", vbInformation, "File Found"
End If
End Sub

Sub CopyFile()
Dim FSO
Dim file As String, sfol As String, dfol As String
file = "test.xls" ' change to match the file name
sfol = "C:\" ' change to match the source folder path
dfol = "E:\" ' change to match the destination folder path
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FileExists(sfol & file) Then
	MsgBox sfol & file & " does not exist!", vbExclamation, "Source File Missing"
ElseIf Not FSO.FileExists(dfol & file) Then
	FSO.CopyFile (sfol & file), dfol, True
Else
	MsgBox dfol & file & " already exists!", vbExclamation, "Destination File Exists"
End If
End Sub

Sub MoveFile()
Dim FSO
Dim file As String, sfol As String, dfol As String
file = "test.xls" ' change to match the file name
sfol = "C:\" ' change to match the source folder path
dfol = "E:\" ' change to match the destination folder path
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FileExists(sfol & file) Then
	MsgBox sfol & file & " does not exist!", vbExclamation, "Source File Missing"
ElseIf Not FSO.FileExists(dfol & file) Then
	FSO.MoveFile (sfol & file), dfol
Else
	MsgBox dfol & file & " already exists!", vbExclamation, "Destination File Exists"
End If
End Sub

Sub DeleteFile()
Dim FSO
Dim file As String
file = "C:\test.xls" ' change to match the file w/Path
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(file) Then
	FSO.DeleteFile file, True
Else
	MsgBox file & " does not exist or has already been deleted!" _
			, vbExclamation, "File not Found"
End If
End Sub
Sub MoveSomeFiles()

Dim FSO As Object
	Dim FromPath As String
	Dim ToPath As String
	Dim Fdate As Date
	Dim FileInFromFolder As Object

For Each FileInFromFolder In FSO.getfolder(FromPath).Files
		Fdate = Int(FileInFromFolder.DateLastModified)
		'Copy files from 1-Oct-2006 to 1-Nov-2006
		If Fdate >= DateSerial(2006, 10, 1) And Fdate <= DateSerial(2006, 11, 1) Then
			FileInFromFolder.Copy ToPath
		End If
	Next FileInFromFolder

End Sub

Puzzel ze zelf maar in elkaar en je kan ermee maken wat je wil denk ik.
"C++ : Where friends have access to your private members." — Gavin Russell Baker.

#13

mcs51mc

    mcs51mc


  • >250 berichten
  • 470 berichten
  • Ervaren gebruiker

Geplaatst op 02 oktober 2010 - 16:40

@In fysics I trust :
Ik mis maar n iets in jouw code en dat is het verwijderen van de referentie naar de objecten "FSO" met de instructie "set FSO = nothing"
Door dat niet te doen krijg je memory leaks omdat het geheugen gebruikt door FSO niet vrijgegevn wordt op het einde van elke routine.

#14

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 02 oktober 2010 - 16:47

Inderdaad, had ik over het hoofd gezien. Je hebt gelijk!
"C++ : Where friends have access to your private members." — Gavin Russell Baker.

#15

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 oktober 2010 - 21:13

je Visual Basic zal zeker wel werken hoor. maar ik heb daar nog nooit mee geprogrammeerd en heb daar ook niet direct een compiler voor.
En het bat programma werkt nu onmiddellijk dus voorlopig kan ik daar mee door.

Groeten.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures