Muchachooo | zaterdag 20 november 2010 @ 16:40 |
Hoi allemaal!
Ik heb een klein probleem. Ik heb een klein programma geschreven dat mijn zusje loopt te naggen als ze haar downloads niet uit mijn documenten haalt. Dit doe ik door mijn documenten te vergelijken met een backup. nu is mijn probleem dat dit programma ALTIJD aangeeft dat mijn backup verschilt van het origineel, zelfs als ik ze net gekopieerd heb.
weet iemand waar dit aan kan liggen of misschien een workaround in mijn code?
code:
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 33 34 35 36 37 38 39 40 41 42 43 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void btnOK_Click(object sender, EventArgs e) { string pathA = @"C:\Users\Sander\Videos\"; string pathB = @"C:\Users\Sander\Vydeos\";
System.IO.DirectoryInfo dir1 = new System.IO.DirectoryInfo(pathA); System.IO.DirectoryInfo dir2 = new System.IO.DirectoryInfo(pathB);
IEnumerable<System.IO.FileInfo> list1 = dir1.GetFiles("*.*", System.IO.SearchOption.AllDirectories); IEnumerable<System.IO.FileInfo> list2 = dir2.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
bool areIdentical = list1.SequenceEqual(list2);
while (areIdentical == false) { MessageBox.Show("Je hebt de downloads nog niet verplaatst!"); } Application.Exit(); } } } |
|
Prutzenberg | zaterdag 20 november 2010 @ 16:57 |
Waarom zo moeilijk doen? Je kan toch ook gewoon haar standaard download-dir anders instellen? Of haar een eigen account geven, kan ze er gewoon een zooitje van maken zonder dat je er last van hebt. |
Muchachooo | zaterdag 20 november 2010 @ 17:00 |
quote: Op zaterdag 20 november 2010 16:57 schreef Prutzenberg het volgende:Waarom zo moeilijk doen? Je kan toch ook gewoon haar standaard download-dir anders instellen? Of haar een eigen account geven, kan ze er gewoon een zooitje van maken zonder dat je er last van hebt. probleem is, ze heeft een eigen account, en haar standaard directory staat ingesteld, alleen heeft mijn client daar schijt aan en gooit nog steeds alles in mijn docs. bovendien heeft het te maken met haar iets leren, aangezien ik haar bijna elke dag vraag of ze die zooi uit mijn documenten haalt en ze het nooit doet. principekwestie dus  |
xprotagonistx | zaterdag 20 november 2010 @ 17:01 |
Ik ben geen c#, maar ik vermoed dit:
fout: Je kijkt nu of via SequenceEqual of alle FileInfos gelijk zijn. Een FileInfo bevalt de bestandsnaam, maar ook inclusief het pad (dat verschillend is). Verder staat er ook de tijd waarop het bestand gemaakt is, etc. Dat zijn eigenschappen die verschillen, ook al zijn de bestanden qua inhoud hetzelfde.
oplossing: op een andere manier bepalen of bestanden hetzelfde zijn. Je zou kunnen kijken of de namen (excl. pad) hetzelfde zijn en de groottes ook. |
Muchachooo | zaterdag 20 november 2010 @ 17:03 |
quote: Op zaterdag 20 november 2010 17:01 schreef xprotagonistx het volgende:Ik ben geen c#, maar ik vermoed dit: fout: Je kijkt nu of via SequenceEqual of alle FileInfos gelijk zijn. Een FileInfo bevalt de bestandsnaam, maar ook inclusief het pad (dat verschillend is). Verder staat er ook de tijd waarop het bestand gemaakt is, etc. Dat zijn eigenschappen die verschillen, ook al zijn de bestanden qua inhoud hetzelfde. oplossing: op een andere manier bepalen of bestanden hetzelfde zijn. Je zou kunnen kijken of de namen (excl. pad) hetzelfde zijn en de groottes ook. zou je bepaalde parameters mee kunnen geven aan die SequenceEqual? want ik zou zo niet weten hoe ik zorg dat twee lists krijg met alleen de filenames.
EDIT zou het werken als ik system.io.fileinfo verander naar system.io.fileinfo.name? |
xprotagonistx | zaterdag 20 november 2010 @ 17:07 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | bool bestandInBeideLijsten(IEnumerable ene lijst, IEnumerable ander lijst) { foreach(FileInfo ene in de ene lijst) { foreach(FileInfo andere in de andere lijst) { if (ene.naam.equals(andere.naam) && ene.grootte.equals(andere.grootte)) { return true; } } } return false; } |
|
TwenteFC | zaterdag 20 november 2010 @ 17:08 |
Kan je niet gewoon naar de totale map grootte kijken? |
Muchachooo | zaterdag 20 november 2010 @ 17:08 |
quote: hahah daar zeg je me wat.
EDIT nee, DirectoryInfo class heeft geen Length property helaas  |
xprotagonistx | zaterdag 20 november 2010 @ 17:14 |
Dude, niet alles wat je kan bedenken is door Bill voor jou gemaakt als kant en klaar blokje (`property') voor je probleem.
1 2 3 4 5 | long totalegrootte=0; foreach(bestandinfo bestand in directory) { totalegrootte+=bestand.grootte; } |
Je zal ooit zelf wel een paar regels moeten typen. |
TwenteFC | zaterdag 20 november 2010 @ 17:15 |
http://dotnetperls.com/directory-size
1e google result.
Zo dus:
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 33 34 35 36 37 38 | <?php using System; using System.IO;
public class ShowDirSize { public static long DirSize(DirectoryInfo d) { long Size = 0; // Add file sizes. FileInfo[] fis = d.GetFiles(); foreach (FileInfo fi in fis) { Size += fi.Length; } // Add subdirectory sizes. DirectoryInfo[] dis = d.GetDirectories(); foreach (DirectoryInfo di in dis) { Size += DirSize(di); } return(Size); } public static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("You must provide a directory argument at the command line."); } else { DirectoryInfo d = new DirectoryInfo(args[0]); long dsize = DirSize(d); Console.WriteLine("The size of {0} and its subdirectories is {1} bytes.", d, dsize); } } } ?> |
bron: http://msdn.microsoft.com/en-us/library/system.io.directory.aspx |
Muchachooo | zondag 21 november 2010 @ 02:09 |
heb het werkend nu, dank jullie! |