Mr Andersson Posted September 11, 2008 Share Posted September 11, 2008 Kan man vid filkopiering läsa av/få ett event på hur många bytes som är kopierade? Eller måste jag banka ihop en egen kopieringsfunktion för det? I så fall, några enkla tips om hur man gör detta (det går bra med C#-kod). Link to comment Share on other sites More sharing options...
Erki Posted September 12, 2008 Share Posted September 12, 2008 Tek-tips som är ett annat forum jag brukar söka hjälp från. Där hittade jag detta. http://www.tek-tips.com/viewthread.cfm?qid=1498144 Jag är osäker på om man kan gå direkt till en tråd om man inte är registrerad. Den ligger i forumet Visual Basic(Microsoft) -VB.NET/VB2005 och är bara några dagar gammal så du ska nog kunna hitta den ändå. Link to comment Share on other sites More sharing options...
Mr Andersson Posted September 12, 2008 Author Share Posted September 12, 2008 Det verkar onödigt tillkrånglat. Jag har gjort samma sak i Delphi (Object Pascal) för ett par år sedan, och jag kan inte tänka mig att det skulle vara svårare med .net. Link to comment Share on other sites More sharing options...
Anjuna Moon Posted September 12, 2008 Share Posted September 12, 2008 Använd ett FileSystemWatcher-objekt och använd filtret NotifyFilter.Size för att trigga events när filstorleken ändras. Dock så brukar ju Windows reservera utrymme för hela filen vid en filkopiering, så detta sätt kommer nog inte ha önskad effekt. Men låt då bli att använda en ren Copy-funktion och läs istället in källfilen med en BinaryReader, i den block-storlek du känner för, och spara sen ned den med en BinaryWriter. Här har du ju full kontroll över hur många bytes som lästs/skrivits. Svårare är det inte. Link to comment Share on other sites More sharing options...
Anjuna Moon Posted September 12, 2008 Share Posted September 12, 2008 Eftersom jag ändå sitter och väntar på att ett par filmnedladdningar så skrev jag ett exempel till dig. Du får ursäkta att jag skrev det i C#, men det går snabbare så för mig.Här läser den filen i 64K-block och tickar upp progr.bar för varje block. Om du inte vill att denna process skall halta programmet får du använda dig av multithreading och använder du väldigt stora block kan du använda dig av asynkron filaccess, så tråden inte behöver stå och vänta på att blocket lästs in. private void CopyFile(string Source, string Destination) { FileStream sourceStream=new FileStream(Source,FileMode.Open); FileStream destStream = new FileStream(Destination, FileMode.Create); BinaryReader br = new BinaryReader(sourceStream); BinaryWriter bw = new BinaryWriter(destStream); int blockSize = 65536; byte[] buffer=new byte[blockSize]; long fileSize = sourceStream.Length; progressBar1.Maximum = (int)(fileSize/blockSize); progressBar1.Step = 1; while (br.PeekChar() != -1) { buffer=br.ReadBytes(blockSize); bw.Write(buffer); progressBar1.PerformStep(); } br.Close(); bw.Close(); } [inlägget ändrat 2008-09-13 01:38:44 av Anjuna Moon] Link to comment Share on other sites More sharing options...
Mr Andersson Posted September 13, 2008 Author Share Posted September 13, 2008 Strålande! Hinner dock inte testa just nu. Det är ok att du skriver C#-kod. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.