Methode try en cath

Status
Niet open voor verdere reacties.
je moet die code hierboven maar eens testen

krijg een fout in mijn for bij filesize
en bij filesize krijg ik ook een fout
 
Ik weet niet wat je daar allemaal wilt doen maar gaan natuurlijk niet werken.

Als je de size string van fileinfo wilt hebben (de .Length is size in bytes) kun je deze gewoon converten, weet niet wat die loop allemaal moet doen daar.



Als je een size string wilt van een file info kun je ook extension methods gebruiken
Code:
    public static class Extensions
    {
        public static string ToFileSizeString(this FileInfo fileInfo)
        {
            var suffix = new[] { "KB", "MB", "GB", "TB" };
            var bytes = fileInfo.Length;

            int index = 0;
            do
            {
                bytes /= 1024;
                index++;
            } 
            while (bytes >= 1024);

            return string.Format("{0:0.0} {1}", bytes, suffix[index]);
        }
    }


Dan kun je dus gewoon dit doen:
Code:
private void Size(FileInfo info)
{
    var sizeString = info.ToFileSizeString();

    //use it
}
 
die loop moet alleen maar de map groote berekenen bv in de map documenten zit er 2.2gb ik verwijs naar de klasse convertor omdat er daar in word berekend dat het bestand 1024kb is dat hij er mb moet van maken
 
Dan moet je dus door de files loopen, niet door 1 fileinfo


Code:
long size = 0;
foreach (var fileInfo in _files)
{
    size += fileInfo.Length;
}

eerst de size van alle files optellen en dan convert je het 1x


misschien even de parameter naar long aanpassen:
public string ByteSize(long bytes)
 
Laatst bewerkt:
oww kbegin alles door elkaar te slaan nu. Dus voor die size waar meot die lus precies komen in die dir class dan ?
en waar moet je dan verwijzen naar je label.content
 
Je kunt gewoon een method maken de een lijst files neem en een string returned.

Code:
        private string GetFileSizeString(List<FileInfo> files)
        {
            long size = 0;

            foreach (var info in files)
            {
                size += info.Length;
            }

            var c = new convertor();
            return c.ByteSize(size);
        }

Je kunt deze gebruiken als alles klaar is en in scanresult stoppen net als je met mappen hebt gedaan.
 
Sry hoor maar zit compleet in die knoei met die verschillende klassen w8 ik toon eerst wat ik nu heb gedaan

mainwindow
Code:
   public partial class MainWindow : Window
    {
        private readonly DirScanner _scanner;

        public MainWindow()
        {
            InitializeComponent();
            _scanner = new DirScanner();
            
        }

      
      

        private void ButtonBase_Click(object sender, RoutedEventArgs e)
        {
                  //set view and init scanner
            lstFiles.Items.Clear(); //listbox
            txtStatus.Text = "Scanning..."; //status textblock

            _scanner.Path = txtDirectory.Text; //textbox

            //start scan task
            var scanTask = new Task(ScanStuff);
            scanTask.Start();
        }

        private void ScanStuff()
        {
            
            ScanResult result ;

            try
            {
                result = _scanner.Scan(); 
            }
            catch (Exception ex)
            {
                SetStatusBestanden(ex.Message);
                SetStatusMappen(ex.Message);
                SetStatuslMappen(ex.Message);
               // Size(ex.Message.ToString());
                return;
            }

            foreach (var file in result.Files)
            {
                try
                {
                    AddToList(file.FullName);
                }catch(Exception){}
            }
            //convertor conv = new convertor();
            SetStatusBestanden(string.Format("{0}", result.Files.Count));
            SetStatusMappen(string.Format("{0} " ,result.RestrictedFolderCount ));
            SetStatuslMappen(string.Format("{0}", result.Mappen.Count));
            
        }

        private void AddToList(string item)
        {
            //invoke due to threading
            this.Dispatcher.Invoke(() => { lstFiles.Items.Add(item); });
        }

        private void SetStatus(string message)
        {
            //invoke due to threading
            this.Dispatcher.Invoke(() => { txtStatus.Text = message; });
        }
        private void SetStatusMappen(string message)
        {
            //invoke due to threading
            this.Dispatcher.Invoke(() => { lblOnMappen.Content = message; });
        }
        private void SetStatusBestanden(string message)
        {
            //invoke due to threading
            this.Dispatcher.Invoke(() => { lblBestanden.Content = message; });
        }
        private void SetStatuslMappen(string message)
        {
            //invoke due to threading
            this.Dispatcher.Invoke(() => { lblMappen.Content = message; });
        }
       
        private void Size(FileInfo info)
        {
            var sizeString = info.ToFileSizeString();
           
            //use it
        }
        private string GetFileSizeString(List<FileInfo> files)
        {
            long size = 0;

            foreach (var info in files)
            {
                size += info.Length;
            }
           
            var c = new convertor();
            return c.ByteSize(size);
            
        }
         string fileSize(List<FileInfo> files)
        {
            long size = 0;

            foreach (var info in files)
            {
                size += info.Length;
            }

            var c = new convertor();
            return c.ByteSize(size);
        }
        }
    }

klasse convertor

Code:
public static class Convertor
    {
        public static string ToFileSizeString(this FileInfo fileInfo)
        {
            var suffix = new[] { "KB", "MB", "GB", "TB" };
            var bytes = fileInfo.Length;

            int index = 0;
            do
            {
                bytes /= 1024;
                index++;
            } 
            while (bytes >= 1024);

            return string.Format("{0:0.0} {1}", bytes, suffix[index]);

        }
     
    }
    }

klasse scanner

Code:
    public class DirScanner
    {
        private List<FileInfo> _files;
        private List<DirectoryInfo> _mappen;
        private int _restrictedCount;

        public DirScanner()
        {
            _restrictedCount = 0;
            _mappen = new List<DirectoryInfo>();
            _files = new List<FileInfo>();
        }

        public string Path { get; set; }
        public ScanResult Scan()
        {
            _restrictedCount = 0;
            _files.Clear();
            _mappen.Clear();

            var mainDirectory = new DirectoryInfo(Path);

            if (!mainDirectory.Exists)
            {
                throw new ArgumentException("directory path provided is not accessable or does not exsist");
            }

            Scan(mainDirectory);

            return new ScanResult( _files,_mappen, _restrictedCount);
        }

        private void Scan(DirectoryInfo directory)
        {
            try
            {
                var files = directory.GetFiles();
                _files.AddRange(files);
                var mappen = directory.GetDirectories();
                _mappen.AddRange(mappen);
            }
            catch
            {
                _restrictedCount++;
                return;
            }
           
            var dirs = directory.GetDirectories();

            foreach (var dir in dirs)
            {
                Scan(dir);
            }
        }
        private void size(DirectoryInfo filesize)
        {
            long size = 0;
            foreach (var fileInfo in _files)
            {
                size += fileInfo.Length;
            }
            
            
          


            }
        }
    }

klasse scanResult
Code:
   public class ScanResult
    {
        public List<FileInfo> Files { get; private set; }
        public List<DirectoryInfo> Mappen { get; private set; }
        public int RestrictedFolderCount { get; private set; }
       

        public ScanResult(List<FileInfo> files, List<DirectoryInfo> mappen, int restrictedFolderCount, long groote)
        {
            Mappen = mappen;
            Files = files;
            RestrictedFolderCount = restrictedFolderCount;
            Groote = groote;

        }
    }

klasse convertor2

Code:
    public class convertor
    {

            internal string ByteSize(long size)
            {
                throw new NotImplementedException();
            }
        }

Maar om die bestandsgroote werkend te krijgen lukt me nog steeds niet heb die code al in elke klasse geprobeert zonder resultaat
 
Laatst bewerkt:
Ik heb zelf even een nieuw project gemaakt zodat ik het zelf kan testen.

Heb deze class (static) om de size string te krijgen (werkt ):

Code:
    public class ConvertorUtil
    {
        public static string ToByteSizeString(long inputBytes)
        {
            double output = inputBytes;

            int i = 0;
            while (output >= 1024)
            {
                output /= 1024;
                i++;
            }

            string[] suffix = { "bytes", "KB", "MB", "GB", "TB" };
            return String.Format("{0:0.00} {1}", output, suffix[i]);
        }
    }



Zal morgen (vroeg) even het projectje afmaken en posten dan kun je er vast uithalen om dat te maken wat je wilt:

9zmxbs.png
 
Laatst bewerkt:
Ja, je kunt het project downloaden of de classes bekijken, gebruiken en verbeteren wat je wilt voor je lib.
 
ik heb framework 4.0 en 4.5 en hij wil de designer niet loaden hoe kan ik dit oplossen ???
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan