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.
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.
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)
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. .
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
So konvertieren Sie es
%Vor%Tags und Links asp.net-mvc c#