Στην πρόσφατη δουλειά μου, θέλω να φτιάξω ένα μικρό εργαλείο για υπενθυμίσεις πελατών. Φυσικά, το πρόγραμμα winform πρέπει να διαβάσει το αρχείο διαμόρφωσης του ίδιου καταλόγου με την εφαρμογή (όχι το αρχείο exe.config).
Για να διαβάσω τον κατάλογο όπου βρίσκεται η τρέχουσα εφαρμογή, σκέφτηκα αμέσως το System.Environment.CurrentDirectory για να λάβω τον τρέχοντα κατάλογο εργασίας. Το πρόγραμμα φαίνεται να λειτουργεί άψογα.
Όταν ήρθα στη δουλειά το επόμενο πρωί, εμφανίστηκε: "Λείπει το αρχείο διαμόρφωσης ανάγνωσης". Η εφαρμογή προσθέτει αυτόματη εκκίνηση εκκίνησης. Αυτό το μήνυμα εμφανίζεται για να διαβάσει την αποτυχία του αρχείου διαμόρφωσης, ελέγξτε αμέσως εάν το αρχείο διαμόρφωσης στον κατάλογο της εφαρμογής έχει διαγραφεί από μόνο του. Μετά τον έλεγχο, διαπίστωσα ότι το αρχείο ήταν ακόμα εκεί και βγήκα από το πρόγραμμα και το έτρεξα ξανά
Ακόμα μια χαρά, δεν λείπει το αναδυόμενο προφίλ ανάγνωσης. Στη συνέχεια, δείτε αν η διαδρομή της καταχώρησης εκκίνησης στο μητρώο δεν βρίσκεται στον κατάλογό μου; Κοιτάζοντας το αρχείο διαδρομής, δεν πειράζει. Λίγο μπερδεμένος; Αποσυνδεθείτε από τον υπολογιστή και προσπαθήστε να κάνετε επανεκκίνηση, εξακολουθεί να εμφανίζεται, το αρχείο διαμόρφωσης λείπει. Ο λόγος για τον οποίο δεν μπορείτε να βρείτε τον τρόπο θα ληφθεί άμεσα υπόψη
MessageBox, το πρόγραμμα εκτελείται και διαπιστώνει ότι η διαδρομή είναι πράγματι αυτή η διαδρομή.
Προσθέστε τον κωδικό MessageBox και συνεχίστε την εκκίνηση της δοκιμής. Κατά την εκκίνηση, διαπίστωσα ότι ο τρέχων κατάλογος που εμφανίστηκε ήταν C: \ Windows \ System32 και μπερδεύτηκα αμέσως. Σκέφτηκα, μήπως το πρόγραμμα του Λάο Τσε έτρεξε στο system32; Ο έλεγχος του μητρώου και του sysetm32 δεν έχει την εφαρμογή μου. Τέλος, σκέφτηκα ότι θα έπρεπε να υπάρχει πρόβλημα με τον κώδικα για να πάρω τη διαδρομή.
Μετά από επανειλημμένες δοκιμές, διαπιστώθηκε ότι το System.Environment.CurrentDirectory πρόκειται πράγματι να λάβει τον τρέχοντα κατάλογο, αλλά εάν το πρόγραμμα Α καλέσει το πρόγραμμα Β και το πρόγραμμα Β χρησιμοποιεί το System.Environment.CurrentDirectory για να λάβει τον κατάλογο. Στη συνέχεια, ο κατάλογος που λαμβάνεται στο πρόγραμμα Β δεν είναι πλέον ο κατάλογος όπου βρίσκεται η εφαρμογή Β. Γίνεται ο κατάλογος όπου βρίσκεται το Α. Δεν είναι δύσκολο να διαπιστωθεί ότι ο κατάλογος που εμφανίζεται κατά την εκκίνηση είναι C:\Windows\System32 επειδή το πρόγραμμα αυτόματης εκκίνησης εκκίνησης καλείται επίσης από μια διαδικασία στα Windows.
Επομένως, εάν το πρόγραμμα winform θέλει να αποκτήσει τον κατάλογο όπου βρίσκεται η τρέχουσα εφαρμογή, είναι καλύτερο να μην χρησιμοποιήσετε το System.Environment.CurrentDirectory. Αντίθετα, είναι: Application.StartupPath Με αυτόν τον τρόπο, δεν έχει σημασία ποιος το καλεί.
Κωδικός δοκιμής:
Μεταφέρθηκε από:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
|