[EDIT=herbivore]Abgeteilt von Endswith: Textdatei nach Endungen durchsuchen diese per String List kopieren[EDIT]
So ich habe den Thread um eine Action erweitert, da ich noch eine kleine Frage habe...
Das ganze habe ich jetzt noch erweitert damit ich die Dateien gleich nacheinander kopieren kann.
die sSourceFile hat den Inhalt:
C:\test1.txt
D:\testordner\test2.txt
E:\test3.txt
nun möchte ich diese einelesen und jede zeile abarbeiten. Es soll imm die Datei kopiert werden nach einen bestimmten Zielordner (C:\zielordner)
Leider bricht die Konsolenanwendung immer ab, weil die Datei von einem anderen Prozess verwendet wird. Nach Meiner auffassung müsste das aber File.Copy egal sein weil es ja keinen Exclusive-Recht drauf haben muss...
Hier mein Code:
Nochmals Danke schon im Voraus!
List<string> listCopy = new List<string>();
foreach (string lineFilename in File.ReadAllLines(sSourceFile))
{
string destFile = System.IO.Path.Combine(@"C:\zielordner", lineFilename);
System.IO.File.Copy(lineFilename, destFile, true);
}
Hallo cyntonix,
ob du eine Datei, die in Benutzung ist, erneut öffnen (also kopieren) kannst, hängt vom FileShare-Modus ab, der beim Öffnen benutzt wird, und zwar sowohl beim ersten als auch beim zweiten Öffnen. Nur wenn die beide zusammen passen, klappt es.
Das Thema FileShare wurde schon einige Male besprochen. Bitte benutze die Forumssuche und poste die besten Treffer hier. Vielen Dank!
herbivore
Hallo,
erstmal Danke für FileShare-Modus. Hab mich eingelesen, leider ist mein Fall anders:
Ich lese aus der sSourceFile den Dateinamen (kompletter Pfad) aus. Diese Datei soll ins Zielverzeichnis kopiert werden (C:\zielordner).
Beim Kopiervorgang wirft er eine Exception dass er auf die "zu kopierende Datei" nicht zugreifen kann. Aber diese ist definitiv nicht geöffnet bzw. wird von einem anderen Prozess bearbeitet.
Der Prozess kann nicht auf die Datei "C:\test1.txt" zugreifen, da sie von einem anderen Prozess verwendet wird.
Das verwirrt mich und ich weiß leider nicht wo ich zu Suchen anfangen sollte, denn diese Datei wird von meinem Code nicht geöffnet (Die Datei ist sonst auch nicht geöffnet).
Ein paar Fragen zu deinen Problem..
Hallo unconnected,
ich mache das ganze gerade übers Netzwerk und habe es lokal auch schon getestet...
Hallo,
du kannst z.B. mit dem ProcessExplorer von Sysinternals nachschauen welcher Prozess die Datei gesperrt hat. (Menu - Find -> Find Handle or DLL...)
Gruß,
Tom
Hallo,
vielleicht ist's ja ein übereifriger Virenscanner?
ähh moment mal.. Was kommt wohl bei Path.Combine("C:\Zielordner","D:\testordner\test2.txt") herraus???
so mal ausprobiert.. bei Path.Combine(@"C:\Zielordner", @"C:\test1.txt");
kommt C:\test1.txt raus.. und jetzt lass mich in die Kugel gucken... was die variable sSourceFile enthält.................................... C:\Test1.txt ?
// Edit: Ok Fehler gefunden, hab immer an der falschen Stelle gesucht (Danke @unconnected)
Ich korrigiere das ganze mal... und poste dann das ergebnis
@ujr: Auch mit deaktiviertem Virenscanner geht es nicht Lokal
@Tom: Der ProzessExplorer zeigt mir keinen Prozess an
Da das ganze später im Netzwerk liegt wird es sich nicht vermeiden lassen, dass das Backup mal drüberläuft.
Bin total ratlos. Gibt es eine Möglichkeit das zu umgehen?
Es ist doch auch komisch, dass es bei mir Zuhause und in der Arbeit der gleiche Fall ist (Lokal & Netzwerk).
ich habe meinen Code auf 2 Zeilen reduziert:
string sdestFile = System.IO.Path.Combine(@"C:\Zielordner\", @"C:\Startordner\test.txt");
System.IO.File.Copy(@"C:\Startordner\test.txt", sdestFile, true);
Meiner Meinung nach liegt es dann wohl an Path.Combine, da es mit
System.IO.File.Copy(@"C:\Startordner\test.txt", sdestFile, true);
funktioniert...
Warum benutzt du überhaupt das Path.Combine? Ist doch eigentlich komplett unnötig, oder?
There are 10 kind of people, those who understand binary and those who don't.
Nicht ganz, wenn er noch einen schritt weiter geht, das ein post höher war ja nur nen ausschnitt aus seiner schleife.
Ich denke mit Path.Combine(@"C:\Zielordner", Path.GetFileName(@"C:\test1.txt")); sollte die sache gegessen sein.
So, das ging ja schnell. Ich hab Combine einfach falsch verwendet... So funktionierts 😃
Danke an ALLE!
List<string> resultCopy = new List<string>();
foreach (string lineCopy in File.ReadAllLines(sFilelist))
{
string sFileName = System.IO.Path.GetFileName(lineFilelist);
string sdestFile = System.IO.Path.Combine(sTargetPath, sFileName);
System.IO.File.Copy(lineFilelist, sdestFile, true);