Die meisten Beispiele zeigen, wie Textdateien vom genauen Speicherort gelesen werden (zB "C: \ Benutzer \ Besitzer \ Dokumente \ test1.txt"). Aber, wie man Textakten liest, ohne vollständigen Weg zu schreiben, also würde mein Code funktionieren, wenn er auf andere Computer kopiert wird. Mit Visual Studio habe ich 2 Textdateien zum Projekt hinzugefügt (Konsolenprojekt) und weiß nicht, wie ich diese Dateien am besten lese. Hoffe, ich habe mein Problem klar beschrieben. Vielleicht musste ich diese txt-Dateien differently (wie direkt in den gleichen Ordner als .exe-Datei) hinzufügen?So lesen Sie vorhandene Textdateien, ohne den Pfad zu definieren
Antwort
Sie könnten Directory.GetCurrentDirectory
verwenden:
var path = Path.Combine(Directory.GetCurrentDirectory(), "\\fileName.txt");
, die für die Datei fileName.txt
im aktuellen Verzeichnis der Anwendung aussehen wird.
['Directory.GetCurrentDirectory()'] (http://msdn.microsoft.com/en-us/library/system.io.directory.getcurrentdirectory.aspx) gibt _ "Eine Zeichenfolge zurück, die den Pfad des aktuellen Arbeitsbereichs enthält Verzeichnis und endet nicht mit einem umgekehrten Schrägstrich (\\) "_. Verwenden Sie 'Path.Combine()' anstelle von String-Verkettung. – CodeCaster
Bei einer Konsolenanwendung ist das Arbeitsverzeichnis oft nicht dasselbe wie das Verzeichnis, das die ausführbare Datei enthält. Warum befinden sich diese beiden Textdateien, die dem Programm zugeordnet sind, dort? –
es geht für das Verzeichnis des aktuellen Laufwerks nicht das Verzeichnis der Anwendung – CME64
Wenn Sie einen Pfad angeben, kann er absolut/verwurzelt oder relativ sein. Wenn Sie einen relativen Pfad angeben, wird dieser aufgelöst, indem Sie das Arbeitsverzeichnis des laufenden Prozesses übernehmen.
Beispiel:
string text = File.ReadAllText("Some\\Path.txt"); // relative path
Der obige Code hat die gleiche Wirkung wie die folgenden:
string text = File.ReadAllText(
Path.Combine(Environment.CurrentDirectory, "Some\\Path.txt"));
Wenn Sie Dateien, die in der gleichen Position relativ immer sein werden an Ihrem Anwendung, nur einen relativen Pfad zu ihnen, und sie sollten korrekt auf verschiedenen Computern auflösen.
Sie müssen entscheiden, in welchem Verzeichnis die Datei relativ sein soll. Sobald Sie das getan haben, bauen Sie den vollständigen Pfad wie folgt aus:
string fullPathToFile = Path.Combine(dir, fileName);
Wenn Sie das Basisverzeichnis nicht liefern dir
dann werden Sie an der Gesamt ausgeliefert sein, was auch immer passiert, in das Arbeitsverzeichnis des Prozesses. Das ist etwas, das Sie nicht kontrollieren können. Beispielsweise können Verknüpfungen zu Ihrer Anwendung es angeben. Die Verwendung von Dateidialogen kann dies ändern.
Für eine Konsolenanwendung ist es sinnvoll, relative Dateien direkt zu verwenden, da Konsolenanwendungen so konzipiert sind, dass das Arbeitsverzeichnis eine kritische Eingabe darstellt und ein gut definierter Teil der Ausführungsumgebung ist. Für eine GUI-Anwendung ist dies jedoch nicht der Fall, weshalb ich empfehle, dass Sie Ihren relativen Dateinamen explizit in einen vollständigen absoluten Pfad unter Verwendung eines gut definierten Basisverzeichnisses konvertieren.
Jetzt, da Sie eine Konsolenanwendung haben, ist es sinnvoll, einen relativen Pfad zu verwenden, vorausgesetzt, dass die fraglichen Dateien im Arbeitsverzeichnis liegen. Aber es wäre sehr üblich, dass dies nicht der Fall ist. Normalerweise wird das Arbeitsverzeichnis verwendet, um anzugeben, wo die Eingabe- und Ausgabedateien des Benutzers gespeichert werden sollen. Es zeigt normalerweise nicht auf den Speicherort der Programmdateien.
Eine letzte Option ist, dass Sie nicht versuchen, diese Programmdateien als externe Textdateien bereitzustellen. Vielleicht ist es eine bessere Option, sie als Ressourcen mit der ausführbaren Datei zu verknüpfen. Auf diese Weise sind sie mit der ausführbaren Datei verbunden und Sie können dieses Problem vollständig umgehen.
Es gibt viele Möglichkeiten, einen Pfad zu erhalten. Siehe CurrentDirrectory. Sie können auch den vollständigen Dateinamen Ihrer Anwendung abrufen, indem Sie Assembly.GetExecutingAssembly() verwenden. Location und dann verwenden Sie die Path-Klasse, um einen Verzeichnisnamen abzurufen.
Als Ihr Projekt ist ein Konsolenprojekt Sie den Pfad zu den Textdateien passieren können, die Sie über die Zeichenfolge lesen wollen [] args
static void Main(string[] args)
{
}
Innerhalb Haupt Sie überprüfen können, ob Argumente übergeben werden
if (args.Length == 0){ System.Console.WriteLine("Please enter a parameter");}
Extract ist ein Argument
string fileToRead = args[0];
Fast alle Sprachen unterstützen das Konzept der Argument übergeben und folgen ähnlichen Mustern zu C#.
Weitere C# spezifische siehe http://msdn.microsoft.com/en-us/library/vstudio/cb20e19t.aspx
Sie müssen unbedingt wissen, wo die Dateien gelesen werden lokalisiert werden kann. Jedoch kann diese Information relativ natürlich sein, so dass es gut an andere Systeme angepasst werden kann.
So könnte es in das aktuelle Verzeichnis beziehen (erhalten sie von Directory.GetCurrentDirectory()
) oder auf die Anwendung ausführbaren Pfad (zB. Application.ExecutablePath
kommt bei Verwendung von Windows Forms oder über Assembly.GetEntryAssembly().Location
in den Sinn) oder zu einem speziellen Windows-Verzeichnis wie „Dokumente und Einstellungen "(Sie sollten Environment.GetFolderPath()
mit einem Element der Environment.SpecialFolder
Enumeration verwenden).
Beachten Sie, dass das "aktuelle Verzeichnis" und der Pfad der ausführbaren Datei nicht unbedingt identisch sind. Sie müssen wissen, wo Sie suchen müssen!
In beiden Fällen, wenn Sie einen Pfad bearbeiten müssen, verwenden Sie die Path-Klasse, um Teile des Pfads zu teilen oder zu kombinieren. den Pfad der Datei (einschließlich Dateiname mit Erweiterung) schreiben
static void Main(string[] args)
{
string fileName = System.IO.Path.GetFullPath(Directory.GetCurrentDirectory() + @"\Yourfile.txt");
Console.WriteLine("Your file content is:");
using (StreamReader sr = File.OpenText(fileName))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
Console.ReadKey();
}
Wenn Ihr mit Konsole können Sie auch noch den Benutzer this.It fragt:
Dies wird eine Datei in das Arbeitsverzeichnis laden.
static void Main(string[] args)
{
Console.WriteLine("****please enter path to your file****");
Console.Write("Path: ");
string pth = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("Your file content is:");
using (StreamReader sr = File.OpenText(pth))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
Console.ReadKey();
}
Wenn Sie WinForms zum Beispiel verwenden versuchen, dieses einfache Beispiel:
private void button1_Click(object sender, EventArgs e)
{
string pth = "";
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
pth = ofd.FileName;
textBox1.Text = File.ReadAllText(pth);
}
}
Wenn Ihre Anwendung ein Web-Service ist, wird Directory.CurrentDirectory
nicht.
Verwenden Sie stattdessen System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory.ToString(), "yourFileName.txt"))
.
- 1. Definieren Sie den Pfad zum Ordner "Bin"
- 2. Wie können Sie Textdateien lesen?
- 3. So geben Sie den Pfad zu einem Cargo.toml an
- 4. So erstellen Sie einen Hyperlink ohne den URL-Pfad anzuzeigen
- 5. Lesen Sie Unicode Textdateien mit Java
- 6. So bestätigen Sie den Pfad zu den Schemadefinitionen
- 7. JasperReports API: So definieren Sie den Datenadapter
- 8. So verwenden Sie den ASP.NET-Mitgliedschaftsanbieter für bereits vorhandene Daten
- 9. Kompilieren Sie Typoskript, ohne den Pfad node_modules zu verlieren?
- 10. Lesen von großen Textdateien effizient
- 11. So starten Sie den Prozess ohne Administratorrechte
- 12. So ändern Sie den npm-Pfad
- 13. Lesen von Textdateien mit read.table
- 14. Lesen und Schreiben von Textdateien
- 15. Wie ermitteln Sie den physischen Pfad einer Datei ohne HttpContext?
- 16. So konfigurieren Sie den Plug.Static ohne Phoenix
- 17. C# - Textdateien lesen (System IO)
- 18. Deklarieren Sie eine Struktur in C, ohne sie zu definieren
- 19. So definieren Sie den benutzerdefinierten Wochenbereich in FullCalendar
- 20. So speichern Sie den kürzesten Pfad im Dijkstra-Algorithmus
- 21. Pfad definieren, die
- 22. So lesen Sie den Attributwert von xml
- 23. Python: Zeilen aus komprimierten Textdateien lesen
- 24. Wie ersetzen Sie vorhandene Operatoren, ohne sie in Io aufzurufen?
- 25. Java IO: Lesen von Textdateien, wie sie gesehen werden
- 26. Lesen Sie viele Textdateien in SQL Server Express
- 27. Definieren Sie mein eigenes lesen Makro
- 28. So definieren Sie zusammengesetzten Primärschlüssel in SQLAlchemy
- 29. So lesen Sie eine Webseite in PHP
- 30. So lesen Sie den Dateiinhalt als Parameter-Batch-Datei
Was versuchen Sie zu erreichen? Etwas wie 'Read (" test1.txt "); ' ?? – Lucas
Fügen Sie neben den anderen Antworten die folgenden Punkte hinzu: Denken Sie daran, die Datei als Inhalt hinzuzufügen, damit sie in das Ausgabeverzeichnis kopiert wird. Klicken Sie dazu mit der rechten Maustaste auf die Datei, die sich in Ihrem Projekt unter dem Lösungsexplorer (test1.txt) befindet, wählen Sie Eigenschaften und dann "Build Action" als Inhalt und Kopieren in "Ausgabeverzeichnis" "Immer kopieren" oder "Kopieren wenn neuer ". – saamorim