Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 31124|Απάντηση: 2

[Πρόγραμμα κονσόλας] Να είστε προσεκτικοί με το System.Environment.CurrentDirectory για να λάβετε τον τρέχοντα κατάλογο

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 10/11/2020 3:04:17 μ.μ. | | | |
Στην πρόσφατη δουλειά μου, θέλω να φτιάξω ένα μικρό εργαλείο για υπενθυμίσεις πελατών. Φυσικά, το πρόγραμμα 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 Με αυτόν τον τρόπο, δεν έχει σημασία ποιος το καλεί.

Κωδικός δοκιμής:




Μεταφέρθηκε από:Η σύνδεση με υπερσύνδεσμο είναι ορατή.




Προηγούμενος:Σύγκριση φανέλας δικτύου K8S και calico
Επόμενος:Η C# τοποθετεί τα DLL της βιβλιοθήκης αναφοράς σε υποφακέλους μέσω ανίχνευσης
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 10/11/2020 3:08:26 μ.μ. |
Η C# είναι μια συλλογή μεθόδων για τη λήψη της τρέχουσας διαδρομής εκτέλεσης του προγράμματος

Λάβετε την πλήρη διαδρομή προς την τρέχουσα διαδικασία, συμπεριλαμβανομένου του ονόματος αρχείου (όνομα διαδικασίας).
συμβολοσειρά str = αυτό. GetType(). Συναρμολόγηση.Τοποθεσία;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Η πλήρης διαδρομή προς την κύρια λειτουργική μονάδα που λαμβάνει το νέο στοιχείο διεργασίας και το συσχετίζει με την τρέχουσα ενεργή διεργασία, συμπεριλαμβανομένου του ονόματος αρχείου (όνομα διεργασίας).
string str = System.Diagnostics.Process.GetCurrentProcess(). MainModule.ΌνομαΑρχείου;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)

Λαμβάνει τον βασικό κατάλογο του τρέχοντος τομέα εφαρμογής του τρέχοντος νήματος, ο οποίος χρησιμοποιείται από την επίλυση διενέξεων συναρμολόγησης για τη διερεύνηση της συγκρότησης.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Λάβετε και ορίστε το όνομα του καταλόγου που περιέχει την εφαρμογή. (Συνιστάται)
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Λάβετε τη διαδρομή προς το εκτελέσιμο αρχείο που ξεκίνησε την εφαρμογή, εξαιρουμένου του ονόματος του εκτελέσιμου αρχείου.
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Λάβετε τον τρέχοντα κατάλογο εργασίας της εφαρμογής (αναξιόπιστος).
συμβολοσειρά str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Δημοσιεύτηκε στις 22/9/2021 8:38:52 μ.μ. |
Μάθε να μαθαίνεις...
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com