Hallo zusammen,
ich verwende unter Windows XP das Microsoft Tool "Handle" um festzustellen ob irgendein Betriebssystem-Prozeß auf eine bestimmte Datei zugreift.
Greift kein Prozess auf eine Datei zu sieht die Ausgabe von Handle z.B. so aus:
Wird die Datei foo.iso nun beispielsweise gerade erst auf das Laufwerk kopiert sieht die Ausgabe so aus:
So weit so gut, nun scheitere ich daran das in einem java-Programm zu verwenden...
Hier meine simple main-Klasse:
Greift nun kein anderes Programm auf die Datei zu, ist die Ausgabe wie erwartet:
Wird die Datei aber erst gerade geschrieben, kriege ich exakt die selbe Ausgabe also
obwohl ja, wie in der Kommandozeile, diese Ausgabe
zu erwarten gewesen wäre.....
Irgendwas scheine ich also falsch zu machen in meinem Programm, nur ich sehe nicht was?
Sieht jemand was ich hier falsch mache?
Danke für alle Tips!
ich verwende unter Windows XP das Microsoft Tool "Handle" um festzustellen ob irgendein Betriebssystem-Prozeß auf eine bestimmte Datei zugreift.
Greift kein Prozess auf eine Datei zu sieht die Ausgabe von Handle z.B. so aus:
Code:
C:\tmp\Handle\handle.exe C:\tmp\foo.iso
Code:
Handle v3.2
Copyright (C) 1997-2006 Mark Russinovich
Sysinternals - [url]www.sysinternals.com[/url]
No matching handles found.
Wird die Datei foo.iso nun beispielsweise gerade erst auf das Laufwerk kopiert sieht die Ausgabe so aus:
Code:
Handle v3.2
Copyright (C) 1997-2006 Mark Russinovich
Sysinternals - [url]www.sysinternals.com[/url]
explorer.exe pid: 776 A50: C:\tmp\foo.iso
So weit so gut, nun scheitere ich daran das in einem java-Programm zu verwenden...
Hier meine simple main-Klasse:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestIt {
public static void main(String[] args){
String pathToFileHandleTool = "C:\\tmp\\Handle\\handle.exe";
String pathToFile = "C\\:tmp\\foo.iso";
String expectedFileHandleSuccessOutput = "(.*)No matching handles found(.*)";
ProcessBuilder builder = null;
// check for os
if(System.getProperty("os.name").matches("(.*)Windows(.*)")) {
System.out.println("we are on windows..");
builder = new ProcessBuilder( pathToFileHandleTool, pathToFile);
} else {
System.out.println("we are on linux..");
builder = new ProcessBuilder( pathToFileHandleTool, pathToFile);
}
Process process = null;
String commandOutput = "";
String line = null;
BufferedReader bufferedReader = null;
try {
process = builder.start();
// read command output
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while((line = bufferedReader.readLine()) != null) {
commandOutput += line;
System.out.println(line);
}
// wait till process has finished
process.waitFor();
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (InterruptedException e) {
System.out.println(e.getMessage());
e.printStackTrace(); }
// check output to assure that no process uses file
if(commandOutput.matches(expectedFileHandleSuccessOutput))
System.out.println("no other processes accesses file!");
else
System.out.println("one or more other processes access file!");
}
}
Greift nun kein anderes Programm auf die Datei zu, ist die Ausgabe wie erwartet:
Code:
we are on windows..
Handle v3.2
Copyright (C) 1997-2006 Mark Russinovich
Sysinternals - [url]www.sysinternals.com[/url]
No matching handles found.
no other processes accesses file!
Wird die Datei aber erst gerade geschrieben, kriege ich exakt die selbe Ausgabe also
Code:
we are on windows..
Handle v3.2
Copyright (C) 1997-2006 Mark Russinovich
Sysinternals - [url]www.sysinternals.com[/url]
No matching handles found.
no other processes accesses file!
obwohl ja, wie in der Kommandozeile, diese Ausgabe
Code:
Handle v3.2
Copyright (C) 1997-2006 Mark Russinovich
Sysinternals - [url]www.sysinternals.com[/url]
explorer.exe pid: 776 A50: C:\tmp\foo.iso
zu erwarten gewesen wäre.....
Irgendwas scheine ich also falsch zu machen in meinem Programm, nur ich sehe nicht was?
Sieht jemand was ich hier falsch mache?
Danke für alle Tips!