Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

C# αποριες

Îåêßíçóå áðü ôï ìÝëïò NGF. Τελευταία δημοσίευση από το μέλος NGF στις 04-04-2007, 15:28. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  22-03-2007, 23:47 26897

    C# αποριες

    Γραφω ενα προγραμμα το οποιο σβηνει αρχεια ομαδικα. Εχω κουμπι για να επιλεγει ο χρηστης αρχεια για σβησιμο με filedialog Και κουμπι για να διαλεγει φακελο με αρχεια ο χρηστης. Για το τελευταιο ο κωδικας που χρησιμοποιω ειναι

                        DirectoryInfo Dir;
                        FileInfo[] FFiles;
                        Dir = new DirectoryInfo(@FBD.SelectedPath);
                        if (chsubfolders.Checked == true)
                        {
                            FFiles = Dir.GetFiles("*.*", SearchOption.AllDirectories);
                            foreach (FileInfo F in FFiles) lstfiles.Items.Add(F.FullName);

                        }

    αυτα μεσα σε try catch. Τωρα ενα προβλημα ειναι οτι μπορει να πεσει σε φακελο που δεν εχει δικαιωματα να μπει οπως o System Volume Information. Εκει περα βαρα σφαλμα αλλα εγω θελω να απλος να αγνοει τον φακελο που δεν μπορει να μπει και να συνεχιζει παρακατω. 2)Οταν πια εχουν μπει ολα τα αρχεια κατα τη διαρκεια του σβησιματος των επιλεγμενων αρχειων μπορει να κολησει σε καποια αρχεια λεγοντας οτι δεν επιτρεπεται η προσβαση στα αρχεια. Ο κωδικας αυτος βρισκεται και παλι μεσα σε try catch. Πως μπορω παλι να το κανω να αγνοει αυτα τα αρχεια και να συνεχιζει με τα υπολοιπα χωρις να βγαζει σφαλμα στο χρηστη?

    Ευχαριστω και καληνυχτα

    Burning The Fire........
  •  23-03-2007, 00:18 26898 σε απάντηση της 26897

    Απ: C# αποριες

    Ο πιο απλός και γρήγορος τρόπος (θα εξακολουθεί να σου χτυπά Exception πάντως) είναι να βάλεις το try{} catch{} μέσα στο loop του foreach, ώστε απλά να αγνοεί τα λάθη και να συνεχίζει να εκτελείται ο κώδικας για το υπόλοιπο Collection-Λίστα.

     

  •  23-03-2007, 07:47 26905 σε απάντηση της 26898

    Απ: C# αποριες

    Το σφαλμα συμβαινει στην εντολη FFiles = Dir.GetFiles("*.*", SearchOption.AllDirectories); οταν προσπαθει να ανοιξει καποιο "κλειδωμενο" φακελο για να βαλει να μεσα στην FFiles τα αρχεια του. Βλεπει τους κλειδωμενους φακελους απο το Dir και οταν παει να τους ανοιξει με το Dir.GetFiles τοτε βαραει μολις φτασει σε τετοιο φακελο. Στο foreach μετα απλος βαζει αρχεια στη λιστα αφου τα εχει παει ολα πρωτα απο τους φακελους. Το δοκιμασα μηπως τρεχει τιποτα και με αυτο που ειπες αλλα δεν φταιει αυτη η εντολη

    Burning The Fire........
  •  23-03-2007, 16:09 26927 σε απάντηση της 26905

    Απ: C# αποριες

    Βρηκα αλλο τροπο να το κανω. Τον πηρα απο ενα αρθρο της Ms.

    Ο κωδικας ειναι αυτος

    foreach (string d in Directory.GetDirectories(Dirs))
                    {
                        Application.DoEvents();

                        try
                        {
                           
                            foreach (string f in Directory.GetFiles(d, "*.*"))
                            {
                                Application.DoEvents();
                                if (DirSearch == false) return;
                               

                                lstfiles.Items.Add(f);
                            }
                            AddFolderFiles(d);
                        }
                        catch
                        {
                            continue;
                        }
                   
                    }


    Θελω ομως να ξερω τι δικαιωματα προσβασης εχει ο καθε φακελος ωστε μεσα στο foreach να ελεγχει πρωτα το καθε φακελο αν μπορει να μπει και μετα να μπαινει για να μην βαραει σφαλμα. Πως γινεται να παρω το ACL ενος φακελου?

    Burning The Fire........
  •  27-03-2007, 16:50 27161 σε απάντηση της 26927

    Απ: C# αποριες

    Απορια 2: Πως μπορω να διαβασω ενα οποιοδηποτε αρχειο σε hex. Το ανοιγω παιρνω τον κωδικα και μετα μετατροπη σε hex?

    Burning The Fire........
  •  27-03-2007, 18:38 27180 σε απάντηση της 27161

    Απ: C# αποριες

    Φίλε NGF, σε παρακαλώ αφιέρωσε λίγο από τον χρόνο σου για να διαβάσεις τους κανόνες του dotNETZone.gr

    • Θα πρέπει να γίνεται κάθε δυνατή προσπάθεια ώστε τα μηνύματα να δημοσιεύονται στο σωστό forum (δηλαδή αυτό του οποίου η περιγραφή ταιριάζει περισσότερο με το περιεχόμενο του μηνύματός σας), καθώς και ο τίτλος τους να είναι κατατοπιστικός για το περιεχόμενό τους.  Για παράδειγμα: αποφεύγετε τίτλους του στυλ «Πρόβλημα», ή «Καλόοοο!».  Είναι προτιμότερο να λέτε: «Πρόβλημα με πολλαπλά threads σε VB.NET» ή «Φοβερό! Ο SQL Server 2005 υποστηρίζει recursive queries!».
    • Προσπαθήστε να είστε όσο πιο συγκεκριμένοι και κατανοητοί γίνεται, είτε ρωτάτε, είτε απαντάτε σε κάποιο μήνυμα. Όσες περισσότερες πληροφορίες δώσετε, τόσο αυξάνετε τις πιθανότητες να καταλάβουν οι άλλοι ποιό είναι το πρόβλημα και άρα να σας προτείνουν λύση.

    Μπορείς να ανοίξεις ένα νέο thread μεταφέροντας την ερώτησή σου. Φρόντισε να βάλεις έναν ανάλογο περιγραφικό τίτλο για να διευκολύνεις όσους ψάχνουν επειδή έχουν παρόμοιο πρόβλημα και να "προσκαλέσεις" να σου απαντήσουν όσοι έχουν ασχοληθεί με το συγκεκριμένο θέμα. Το "C# απορίες" δεν είναι κατάλληλο...

    Ως προς το πρόβλημά σου, η φράση "Το ανοιγω παιρνω τον κωδικα και μετα μετατροπη σε hex?" δεν βοηθάει καθόλου για να σε βοηθήσουμε. Ξέρουμε τον προορισμό, ότι θες να καταλήξεις σε δεκαεξαδική αναπαράσταση αλλά από που ξεκινάς;

    [Edit] Επιπρόσθετα, μιας και έχεις λύση (έστω κι αν τη βρήκες ο ίδιος) στο προηγούμενο πρόβλημα, "πρασίνισε την" ώστε να ξέρουν όσοι τη συναντήσουν ότι βρέθηκε λύση!


    Vir prudens non contra ventum mingit
  •  27-03-2007, 20:55 27195 σε απάντηση της 27180

    Απ: C# αποριες

    Ο Μανώλης έχει απόλυτο δίκιο. Να προσθέσω κι εγώ ότι είναι κακή τακτική να κολλάει κανείς μία ερώτηση σε thread που αφορά άλλη ερώτηση. Οι πιθανότητες να πάρει απάντηση μειώνονται δραματικά, καθώς κατά κανόνα οι μόνοι οι οποίοι θα διαβάσουν την ερώτηση είναι αυτοί που ήδη ασχολούνται με την προηγούμενη. Και στην περίπτωση που η αρχική ερώτηση είναι παλιά, η πιθανότητα να πάρει απάντηση η νέα ερώτηση τείνει ... στο μηδέν.

    Σχετικά με την ερώτηση τώρα, έτσι όπως είναι διατυπωμένη μόνο να μαντέψουμε μπορούμε για το τί θέλεις να κάνεις. Να υποθέσω ότι θέλεις να διαβάσεις τα bytes ενός αρχείου και να τα δείξεις σε δεκαεξαδική μορφή?
        Δεν έχει νόημα να πεις "πως θα τα διαβάσω σε δεκαεξαδική μορφή" γιατί τα bytes διαβάζονται ως bytes: ένας αριθμός 8 δυαδικών ψηφίων, ο οποίος είναι ανεξάρτητος από αριθμητικά συστήματα. Όπως και όλοι οι τύποι αριθμών εδώ που τα λέμε (byte, short, int, long, float, double). Νόημα να μιλάς για αριθμητικά συστήματα έχει μόνο όταν θέλεις να εμφανίσεις τον αριθμό σαν κείμενο. Στην περίπτωση αυτή, αυτό που ζητάς είναι πως να φορμάρεις ένα byte (και γενικά οποιοδήποτε αριθμό) ως δεκαεξαδικό. Αυτό μπορείς να το πετύχεις με την Byte.ToString ή την String.Format. Πληροφοριακά, ο format χαρακτήρας για να δείξεις ένα αριθμό ως δεκαεξαδικό είναι το x και το Χ (για μικρά και κεφαλαία αντίστοιχα).

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-03-2007, 20:59 27197 σε απάντηση της 27195

    Απ: C# αποριες

    Τωρα μιας και πηρα λυση δεν ανοιγω thead. Σορρυ. Aπο την αλλη φορα ανοιγω νεα thread Smile

    Burning The Fire........
  •  27-03-2007, 22:42 27207 σε απάντηση της 27197

    Απ: C# αποριες

    Βέβαια, το πήρες τοις μετρητοίς όταν είπα να "πρασινίσεις" τη λύση... Εννοούσα να θέσεις το "Κατάσταση ενότητας" σε "έχει επιλυθεί". Smile Αυτό πρασινίζει τον τίτλο και υποδηλώνει ότι υπάρχει λύση για την ερώτηση του thread. Sorry για την παραπλάνηση, υπέθεσα ότι το είχες παρατηρήσει...


    Vir prudens non contra ventum mingit
  •  04-04-2007, 15:28 27906 σε απάντηση της 27207

    Απ: C# αποριες

    Δεν το ειχα παρατηρησει αλλα δεν πειραζει. Θα το ξερω τωρα! Smile

    Burning The Fire........
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems