pour le Excelpackage constructeur Vous avez besoin d'un objet FileInfo. J'utilise plutôt une sorte d'objet de flux (F.i. Morthstream), car je n'ai pas besoin de sauvegarder le fichier sur le serveur lui-même, mais l'expose comme filtream de toute façon à l'utilisateur. Je ne veux pas faire de fichiers que je dois supprimer latérone des serveurs qui ne sont là que là-bas pour générer des objectifs et jamais utilisé à nouveau. En dehors de cela, sinon j'ai besoin également des droits nécessaires à l'application / utilisateur sur le répertoire / fichier sur le serveur. P>
Donc, ma question est alors: comment puis-je convertir un objet de flux en un objet FileInfo. P>
7 Réponses :
A Cependant, vous pouvez télécharger le code source et ajouter un constructeur qui prend un flux fichierInfo code> est un wrapper simple autour d'un chemin d'accès à un fichier sur disque.
Il n'est pas possible d'avoir un fichierinfo code> envelopper un flux de mémoire. P>
code>. (Le chemin de fichier n'est utilisé que dans la méthode code> Wriditebugfile p>
Vous ne pouvez pas convertir le flux Ce que vous peut em> faire est d'écrire le contenu du flux code> à un fichier sur disque, créez un code> comme tel sur un fichierinfo code>; Ils représentent des choses entièrement différentes. Un flux code> code> contient des données Thay peut ne pas représenter un fichier sur disque. Un fichierInfo code> d'autre part contient des métadonnées sur un fichier, qui peut ou non exister. P>
fichierinfo code> pointant sur ce fichier et Passer que fichierInfo code> sur le constructeur. p>
Il a explicitement dit qu'il ne veut pas faire ça.
@Slaks: Je sais. Et je l'ai informé pourquoi son souhait est peu probable de se réaliser. Cependant, votre suggestion avec l'ajout d'un constructeur dans le code est une bonne.
J'essayais d'éviter de devoir changer le code source, mais cela peut devenir inévitable alors.
@Michael: Oui, il semble se tenir entre ces deux; corrigez le code ou enregistrez le fichier. Soit on sauvera la journée.
Vous ne pouvez pas faire cela, ce que vous devriez faire est de délivrer le flux de la mémoire dans le fichier et d'obtenir l'objet FileInfo pour le fichier nouvellement créé et de le transmettre à l'Excelpackage. P>
Comme mentionné par juste pour Voici comment convertir-le p> Fredrik Mörk code>, ce n'est pas possible car leur conversion n'est pas disponible par défaut disponible entre les deux types et n'est pas également recommandée. référence < / Code>, vous pouvez également fournir votre propre conversion code> logique code> en implémentant iconvertible code> strong>
Mais quelle que soit l'utilisation ... Vous pouvez également créer un fichier videfo et le donner à la fonction au lieu de faire une extension. Probablement l'Excelpackage utilise le fichierInfo pour obtenir des valeurs. La simulation peut donner des résultats imprévisibles
Cela ne fonctionnera pas. ExcelPackage CODE> ESSAYERa de lire le fichier à partir du chemin dans le fichier FileInfo code>.
Ajout du constructeur suivant à Excelpackage permet d'utiliser des flux à la place.
public ExcelPackage( Stream stream ) {
_package = Package.Open( stream, FileMode.Create, FileAccess.ReadWrite );
Uri uriDefaultContentType = new Uri( "/default.xml", UriKind.Relative );
PackagePart partTemp = _package.CreatePart( uriDefaultContentType, "application/xml" );
XmlDocument workbook = Workbook.WorkbookXml;
_package.CreateRelationship( Workbook.WorkbookUri, TargetMode.Internal, schemaRelationships + "/officeDocument" );
_package.DeletePart( uriDefaultContentType );
}
Où et comment puis-je modifier le code source comme vous l'avez fait?
En regardant le code source de La méthode Si vous le souhaitez, vous pouvez surcharger le Excelpackage code>, il utilise la méthode package.open code> sur la propriété FULLNAME CODE> de la propriété FileInfo < / Code> Objet passé au constructeur, avec filemode.open code> et filaccess.readwewrite code>, pour initialiser un fichier code> objet p>
package.open code> peut également accepter un flux code> directement. p>
Excelpackage CODE> Constructeur vous-même pour accepter un paramètre flux code> et simplement appeler package.open code> sur ce < Code> flux code> objet - qui pourrait facilement être, par exemple, un MemoryStream code>. p>
Oui, vous pouvez
var excelPackage = new ExcelPackage(); excelPackage.Load(fileStream);