Kann ich ein Stream-Objekt in ein FileInfo-Objekt konvertieren?

8

Für den ExcelPackage -Konstruktor benötigen Sie ein FileInfo-Objekt. Ich benutze lieber eine Art von Stream-Objekt (zB MemoryStream), weil ich die Datei nicht auf dem Server selbst speichern muss, sondern sie als FileStream für den Benutzer bereitstellen muss. Ich will keine Dateien machen, die ich später von Servern löschen muss, die nur für Generierungszwecke da sind und nie wieder benutzt werden. Ansonsten brauche ich auch die notwendigen Rechte für die Anwendung / Benutzer auf dem Verzeichnis / Datei auf dem Server.

Also meine Frage ist dann: Wie kann ich ein Stream-Objekt in ein FileInfo-Objekt konvertieren.

    
Michael 17.03.2010, 13:15
quelle

7 Antworten

2

Durch Hinzufügen des folgenden Konstruktors zu ExcelPackage können stattdessen Streams verwendet werden.

%Vor%     
Michael 17.03.2010, 14:28
quelle
7

Sie können das Stream nicht in ein FileInfo konvertieren; sie repräsentieren ganz andere Dinge. A Stream enthält Daten, die eine Datei auf der Festplatte darstellen können oder nicht. Ein FileInfo enthält andererseits Metadaten über eine Datei, die vorhanden sein kann oder nicht.

Was Sie können tun, ist den Inhalt von Stream in eine Datei auf der Festplatte zu schreiben, ein FileInfo auf diese Datei zu erstellen und diese FileInfo an den Konstruktor zu übergeben.

    
Fredrik Mörk 17.03.2010 13:19
quelle
2

Eine FileInfo -Klasse ist ein einfacher Wrapper um einen Pfad zu einer Datei auf der Festplatte.
Es ist nicht möglich, dass ein FileInfo einen Speicherstrom umschließt.

Sie können jedoch den Quellcode herunterladen und einen Konstruktor hinzufügen, der ein Stream enthält. (Der Dateipfad wird nur in der WriteDebugFile -Methode verwendet)

    
SLaks 17.03.2010 13:18
quelle
0

Sie können das nicht, was Sie tun sollten, ist den Speicher-Stream in Datei auszugeben und das FileInfo-Objekt für die neu erstellte Datei zu holen und es an das ExcelPackage zu übergeben.

    
RC1140 17.03.2010 13:20
quelle
0

Betrachtet man den Quellcode für ExcelPackage , verwendet er die Package.Open -Methode für die FullName -Eigenschaft des FileInfo -Objekts, das an den Konstruktor übergeben wird, mit FileMode.Open und FileAccess.ReadWrite , um% zu initialisieren. co_de% Objekt.

Die Methode Package kann auch direkt Package.Open akzeptieren.

Wenn Sie möchten, könnten Sie den Stream -Konstruktor selbst überladen, um einen ExcelPackage -Parameter zu akzeptieren, und einfach Stream für dieses Package.Open -Objekt aufrufen - was leicht beispielsweise ein Stream sein könnte. .

    
Dan Tao 17.03.2010 14:44
quelle
0

Ja, du kannst

%Vor%     
Cătălin Rădoi 14.02.2017 08:36
quelle
-1

Wie von Fredrik Mörk erwähnt, ist dies nicht möglich, da zwischen beiden Typen keine Standardkonvertierung verfügbar ist und auch nicht empfohlen wird.

Nur für reference können Sie jedoch Ihre eigene Conversion -Logik bereitstellen, indem Sie IConvertible Schnittstelle. wieder nicht richtige Ansatz in diesem Szenario, aber kann woanders hilfreich sein.

%Vor%

So konvertieren Sie es

%Vor%     
Asad Butt 17.03.2010 13:27
quelle

Tags und Links