Créer un fichier dans la mémoire du système de fichiers
Je suis en utilisant un .NET fonction de la bibliothèque qui transfère des fichiers sur un serveur, et prend comme paramètre un chemin vers un fichier. Les données que je veux envoyer est petit et construit au moment de l'exécution. Je peux l'enregistrer dans un fichier temporaire, puis le télécharger.
Depuis mon application va être déployée dans une variété d'environnements, et je ne sais pas si je vais être capable de créer le fichier temporaire de façon fiable, il serait préférable d'être en mesure de passer dans un chemin d'accès à un fichier virtuel dans la mémoire.
Je ne peux pas changer la bibliothèque; je sais qu'elle exécute les opérations suivantes sur le fichier:
LibraryUploadFunction(string filename) {
fileName = Path.GetFullPath(fileName);
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
...
}
Est-il possible d'éviter d'écrire le fichier sur le disque?
Grâce
Edit:
L'appel de la bibliothèque est Webclient.UploadFile, comme l'a souligné dans les réponses, il y a de nombreuses solutions possibles, y compris à l'aide d'autres bibliothèques, qui sont nombreuses.
Je grince des dents lorsqu'une bibliothèque naïvement ne fonctionne qu'avec des fichiers sur le disque. Un fichier est un nom de séquence d'octets, de sorte que dans le nom de toutes les choses saintes, accepter un flux et une chaîne de caractères pour le nom.
OriginalL'auteur Stefan | 2013-05-03
Vous devez vous connecter pour publier un commentaire.
Non, votre bibliothèque est fondamentalement inflexible dans cet aspect, par le fait qu'il utilise
FileStream
.Options:
OriginalL'auteur Jon Skeet
Si la bibliothèque expose une autre méthode d'accepter un
Stream
, vous pouvez utiliser unMemoryStream
.S'il accepte un
SafeFileHandle
, vous pouvez utiliser unMemoryMappedFile
.Sinon, vous devrez être satisfaits avec un fichier sur le disque.
OriginalL'auteur Kendall Frey
Si je vous comprends bien, vous souhaitez utiliser l'un de l'autre
WebClient.Upload*
méthodes. Par exemple, si vous avez vos données dans unbyte[]
, utilisezUploadData
.Une autre option, si vous souhaitez télécharger les données sous forme d'un flux est d'utiliser
OpenWrite
.Il a causé votre serveur reboot? Ensuite, il ya quelque chose de mal avec votre serveur et vous devez comprendre ce que c'est.
Hehe...c'est pas "mon" serveur en tant que tel. C'est un réseau connecté périphérique intégré, qui est hors de mon contrôle. Il y a des milliers de ces choses dans le domaine. Donc à peu près, je suis coincé avec l'envoi de requêtes dans un format qu'il aime. Au moins, je connais un moyen pour obtenir des données avec succès, de sorte que je peux vivre avec ça!
OriginalL'auteur svick