Hallo zusammen,
ich hänge seit längerer Zeit an einer bestimmten Stelle bei der Implementierung eines Kopierprogramms fest.
Zur Einbindung von SMB-Shares greife ich auf die Jcifs Bibliothek zurück - hier ist auch mein Problem:
Ich bekomme es nicht hin, die zu kopierenden Verzeichnisse mit SmbFile.mkdirs() zu erstellen. Laut API-Doc soll das auch nicht funktionieren - wenn die SMB-Url aber in einem bestimmten Format vorliegt, soll es funktionieren.
Zunächst mach ich also Folgendes:
File-Objekte instanziieren und an die Methode copyDir() übergeben:
Diese Methode kopiert die Verzeichnisse rekursiv, scheitert aber direkt am dest.mkdir(). :
Und zu guter Letzt noch die CopyFile-Methode:
Das Problem ist also, dass ich kein Verzeichnis im SMB-Share erstellen kann und folgende Exception bekomme:
jcifs.smb.SmbException: Cannot create a file when that file already exists.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
Die zu spiegelnden Ordner sind natürlich im SMB-Share noch nicht vorhanden (auch wenn die Exception das vermuten lässt).
Hat jemand Erfahrung mit Jcifs und kann mir sagen, wie es am besten möglich ist, Verzeichnisse in ein SMB-Share zu spiegeln?
Vielen Dank schonmal!
ich hänge seit längerer Zeit an einer bestimmten Stelle bei der Implementierung eines Kopierprogramms fest.
Zur Einbindung von SMB-Shares greife ich auf die Jcifs Bibliothek zurück - hier ist auch mein Problem:
Ich bekomme es nicht hin, die zu kopierenden Verzeichnisse mit SmbFile.mkdirs() zu erstellen. Laut API-Doc soll das auch nicht funktionieren - wenn die SMB-Url aber in einem bestimmten Format vorliegt, soll es funktionieren.
Zunächst mach ich also Folgendes:
File-Objekte instanziieren und an die Methode copyDir() übergeben:
Java:
LocalFile file = new LocalFile("C:/Neuer Ordner");
SmbFile smbfile = new SmbFile("smb://192.168.178.250/Daten/ISOs/",new NtlmPasswordAuthentication("", "user", "pass"));
try {
FileOperation.copyDir(file, smbfile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Diese Methode kopiert die Verzeichnisse rekursiv, scheitert aber direkt am dest.mkdir(). :
Java:
public static void copyDir(File src, SmbFile dest)
throws FileNotFoundException, IOException {
if (src.isDirectory()) {
File[] files = src.listFiles();
if (files != null) {
for (File f : files) {
dest.mkdir(); // Erstelle gegebenfalls neuen Unterordner am Zielort.
copyDir(f, new SmbFile(dest.getPath()+ f.getName())); // Kopiere alles in diesem Unterordner
}
}
}
else {
copyFile(src, dest);
}
}
Und zu guter Letzt noch die CopyFile-Methode:
Java:
public static void copyFile(File src, SmbFile dest) throws FileNotFoundException, IOException {
SmbFileOutputStream fileout = null;
FileInputStream filein = null;
new File(dest.getPath().replaceAll(dest.getName(), "")).mkdirs();
System.out.println(dest.getPath().replaceAll(dest.getName(), ""));
try {
filein = new FileInputStream(src);
fileout = new SmbFileOutputStream(dest);
int count;
byte[] data = new byte[8192];
while ((count = filein.read(data)) != -1) {
fileout.write(data, 0, count);
}
} finally {
safeClose(fileout);
safeClose(filein);
}
}
Das Problem ist also, dass ich kein Verzeichnis im SMB-Share erstellen kann und folgende Exception bekomme:
jcifs.smb.SmbException: Cannot create a file when that file already exists.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
Die zu spiegelnden Ordner sind natürlich im SMB-Share noch nicht vorhanden (auch wenn die Exception das vermuten lässt).
Hat jemand Erfahrung mit Jcifs und kann mir sagen, wie es am besten möglich ist, Verzeichnisse in ein SMB-Share zu spiegeln?
Vielen Dank schonmal!
Zuletzt bearbeitet: