2012-06-06 1 views
5

Ich möchte eine Datei erstellen, die sich in einem bestimmten Verzeichnis befindet. Zum Beispiel: C: \ x \ y \ z \ a.txtWie erstellt man eine Datei und ihre übergeordneten Verzeichnisse in einem Methodenaufruf?

Für diesen Vorgang muss ich das Verzeichnis erstellen, um eine Datei zu erstellen.

Directory.Createdirectory("C:\x\y\z\"); 
File.Create("C:\x\y\z\a.txt"); 

Aber ich frage mich wirklich, ob ich diese Operation in einer einzigen Zeile Code ausführen kann.

Jede Hilfe und Idee wird sehr geschätzt.

+2

Warum ist es so wichtig, dies auf eins zu reduzieren, das eine .NET Framework-spezifische Methode verwendet? –

Antwort

2

Soweit ich weiß, gibt es keine Dateierstellungsmethode, die das Verzeichnis zur gleichen Zeit im .NET-Framework erstellen.

Wenn das Muster "Verzeichnisprüfung/-erstellung, dann Dateierstellung" in Ihrem Code häufig wiederholt wird, müssen Sie es in einer Methode implementieren.

2

einfach: eine Funktion

void MySingleLineOfCodeFunction(string path, string filename) 
{ 
    Directory.Createdirectory(path); 
    File.Create(filename); 
} 

hinzufügen und dann eine einzige Codezeile verwenden:

MySingleLineOfCodeFunction(@"C:\x\y\z\", "a.txt"); 

Was ich versuche zu sagen, dass es keinen Unterschied zwischen Code. Einige davon sind von den Jungs von Microsoft geschrieben, während andere von uns normale Leute sind. Aber die Computer machen keinen Unterschied. :)

+0

Ich habe eine Methode wie diese, aber ich möchte diese zwei Zeilen des Codes auf einzelne Zeile reduzieren, wenn es möglich ist – ibrahimyilmaz

+2

Sie haben es auf eine einzige Zeile reduziert, indem Sie es in eine Methode kombinieren. Es gibt keinen Unterschied zwischen der Methode, die diese beiden API-Aufrufe aufruft, und einigen Microsoft-Funktionen, die die beiden API-Aufrufe aufrufen. Sie MÜSSEN zwei Aufrufe ausführen, eine für das Verzeichnis, eine für die Datei. –

+0

Ich denke, es gibt eine Möglichkeit, dies mit eingebauten C# zu tun, aber es gibt keine Möglichkeit, np :) – ibrahimyilmaz

2

Leider gibt es keine einzige Zeile Code, um zu tun, was Sie wollen.

Warum? Denn selbst wenn wir dies durch eine eingebaute Microsoft-Funktion tun, wird intern zwei Methoden aufgerufen. Eine für die Erstellung von Verzeichnissen und andere für die Erstellung von Dateien.

auch immer Sie Ihre Zeilen Code sie in eine Methode, indem sie und nennen sie in einer einzigen Linie als Petar Ivanov reduzieren, sagte

ODER

Sie eine statische Erweiterungsmethode erstellen. Auf diese Weise können Sie es an anderen Stellen verwenden, ohne eine Instanz zu erstellen. (Reduzierte Ihre eine Zeile, wo Instanz erstellt wird).

+0

Da Datei ein statischer Typ ist, können Sie keine Erweiterungsmethoden für Datei erstellen. –

1

Zum Erstellen einer Datei, nein, das Verzeichnis muss existieren. Auch mit den file friendly Klassen von Visual Basic müssen Sie zuerst die Verzeichnisse erstellen. Interessant ist, dass das Verschieben den Ordner erstellt.

Von Create http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

Verzeichnisse

Eine Anwendung kann kein Verzeichnis erstellen, indem Createfile verwenden, also nur der OPEN_EXISTING Wert ist für dwCreationDisposition für diesen Anwendungsfall gültig. Um ein Verzeichnis zu erstellen, die Anwendung muss rufen Create oder CreateDirectoryEx

+0

+1. Sie schlagen mich dazu :) Dies ist keine Einschränkung des .NET-Frameworks, aber es ist eine Einschränkung der Win32-API. –

0

ich die Antwort von @Petar_Ivanov geändert haben, zu arbeiten, das übergeordnete Verzeichnis auf dem Dateipfad basiert, dachte, es für andere nützlich sein kann, die Macht möchte eine ähnliche Funktion.

public void CreateFile(string filePath) 
    { 
     if (!File.Exists(filePath)) 
     { 
      var parent = Directory.GetParent(filePath); 
      Directory.CreateDirectory(parent.FullName); 
      File.Create(filePath); 
     } 
    } 

Der Hauptvorbehalt bei diesem Ansatz ist, dass; File.Create gibt einen Dateistream zurück, sodass Sie daran denken müssen, ihn zu schließen.

0

Meistens in meinen Code-Blöcken; Ich handle Ordner Existenz direkt vor dem Erstellen von Dateien.

public void CheckCreatePath(fileName) 
{ 
    string filePath = Directory.GetParent(fileName).ToString(); 
    if (!Directory.Exists(filePath)) 
     Directory.CreateDirectory(filePath); 
} 

und nur

CheckCreatePath("C:\\TEMP\\TESTPath\\myFile.txt"); 

im Code-Block verwenden.