Hallo,
Ik heb een windows service geschreven in C# (.NET1.1).
Deze service download .MPG bestanden van een ftpserver om er volgens een .WMV van te maken, welke daarna weer geupload wordt. Als dit gedaan is moeten beide bestanden weer van de pc verwijderd worden.
Dit werkt allemaal goed tot het verwijderen.
De .wmv die gegeneerd is met Windows Media Encoder wordt netjes verwijderd. De .mpg file alleen als deze geen geluid bevat. Dit zijn bijvoorbeeld filmpjes die gemaakt zijn door een aantal plaatjes achter elkaar te zetten met diverse overgangen en daar dan een filmpje van te genereren.
Als ik de mpg in explorer probeer te verwijderen krijg ik de melding dat deze nog in gebruik is door een ander programma. Als ik in code de file exclusief probeer te openen krijg ik dezelfde exception.
Om de bestanden te verwijderen gebruik ik de volgende code:
(excl. openen staat nog als commentaar, was alleen om ff te testen)
Deze code gooit geen exceptions (staat nog try catch om de for loop om dit af te vangen), maar de mpg bestanden worden ook niet verwijderd, totdat ik de service stop. Dan verdwijnen plotseling alle bestanden en is de directory weer leeg.
Waar in vredesnaam kan die aanliggen? Ik heb al geprobeerd standaard te encoden zonder geluid, maar ook dit mocht niet baten.
Om te encoden heb ik gewoon het voorbeeld dat bij de media encoder sdk zat gebruikt, alleen gebruik ik geen bestand als profiel, maar maak ik in code een profiel met de gewenste instellingen aan.
Tis gemaakt in VS.NET 2003 en de service gedraagt zich op Win XP en Win 2003 hetzelfde. Als refrence heb ik Interop.WMEncoderLib om te encoden, verder nog een refrence naar een dll voor FTP en nog wat linkjes naar dll'tjes uit de EnterpriseLibrary van windows (voor db communicatie en logging) bij alle refrences staat Copy Local op true.
Ik hoop dat iemand iets van een tip of oplossing heeft. Anders zit er niet veel anders op dan om de zoveel tijd een keer de service opnieuw te starten. Maar dit heb ik liever niet natuurlijk.
Ik heb een windows service geschreven in C# (.NET1.1).
Deze service download .MPG bestanden van een ftpserver om er volgens een .WMV van te maken, welke daarna weer geupload wordt. Als dit gedaan is moeten beide bestanden weer van de pc verwijderd worden.
Dit werkt allemaal goed tot het verwijderen.
De .wmv die gegeneerd is met Windows Media Encoder wordt netjes verwijderd. De .mpg file alleen als deze geen geluid bevat. Dit zijn bijvoorbeeld filmpjes die gemaakt zijn door een aantal plaatjes achter elkaar te zetten met diverse overgangen en daar dan een filmpje van te genereren.
Als ik de mpg in explorer probeer te verwijderen krijg ik de melding dat deze nog in gebruik is door een ander programma. Als ik in code de file exclusief probeer te openen krijg ik dezelfde exception.
Om de bestanden te verwijderen gebruik ik de volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| foreach (string bestandsnaam in bestanden) { //FileStream tmpStream; //try //{ // tmpStream = File.Open(TEMPDIR + bestandsnaam, FileMode.Open, FileAccess.ReadWrite, FileShare.None); // tmpStream.Close(); System.IO.FileInfo tmp = new System.IO.FileInfo(TEMPDIR + bestandsnaam); if (tmp.Exists) { tmp.Delete(); } else { Logger.Write("File: " + tmp.FullName + " doesnt exist"); } if (System.IO.File.Exists(TEMPDIR + bestandsnaam)) { deletedFiles += "- File: " + TEMPDIR + bestandsnaam + " not deleted \n"; } else { deletedFiles += "- Deleted file: " + TEMPDIR + bestandsnaam + "\n"; } //} //catch (Exception err) //{ // SchrijfError("Bestand kon niet geopend of verwijderd worden", err); //} } |
(excl. openen staat nog als commentaar, was alleen om ff te testen)
Deze code gooit geen exceptions (staat nog try catch om de for loop om dit af te vangen), maar de mpg bestanden worden ook niet verwijderd, totdat ik de service stop. Dan verdwijnen plotseling alle bestanden en is de directory weer leeg.
Waar in vredesnaam kan die aanliggen? Ik heb al geprobeerd standaard te encoden zonder geluid, maar ook dit mocht niet baten.
Om te encoden heb ik gewoon het voorbeeld dat bij de media encoder sdk zat gebruikt, alleen gebruik ik geen bestand als profiel, maar maak ik in code een profiel met de gewenste instellingen aan.
Tis gemaakt in VS.NET 2003 en de service gedraagt zich op Win XP en Win 2003 hetzelfde. Als refrence heb ik Interop.WMEncoderLib om te encoden, verder nog een refrence naar een dll voor FTP en nog wat linkjes naar dll'tjes uit de EnterpriseLibrary van windows (voor db communicatie en logging) bij alle refrences staat Copy Local op true.
Ik hoop dat iemand iets van een tip of oplossing heeft. Anders zit er niet veel anders op dan om de zoveel tijd een keer de service opnieuw te starten. Maar dit heb ik liever niet natuurlijk.
Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier