TransmitFileOptions Énumération
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
L'énumération TransmitFileOptions définit les valeurs utilisées dans les demandes de transfert de fichiers.
Cette énumération prend en charge une combinaison au niveau du bit de ses valeurs membres.
public enum class TransmitFileOptions
[System.Flags]
public enum TransmitFileOptions
[<System.Flags>]
type TransmitFileOptions =
Public Enum TransmitFileOptions
- Héritage
- Attributs
Champs
Disconnect | 1 | Démarrez une déconnexion de niveau transport lorsque toutes les données de fichiers sont mises en file d'attente en vue de leur transmission. En cas d'utilisation avec ReuseSocket, ces indicateurs rétablissent l'état déconnecté et réutilisable du socket une fois le fichier transmis. |
ReuseSocket | 2 | Le handle de socket peut être réutilisé une fois la demande terminée. Cet indicateur n'est valide que si Disconnect est également spécifié. En cas d'utilisation avec Disconnect, ces indicateurs rétablissent l'état déconnecté et réutilisable du socket une fois le fichier transmis. |
UseDefaultWorkerThread | 0 | Utilisez le thread par défaut pour traiter les longues demandes de transfert de fichiers. |
UseKernelApc | 32 | Utilisez des appels de procédure asynchrone du noyau plutôt que des threads de travail pour traiter les longues demandes de transfert de fichiers. Les longues demandes sont celles qui requièrent plusieurs lectures du fichier ou d'un cache. La demande dépend par conséquent de la taille du fichier et de la longueur spécifiée du paquet d'envoi. |
UseSystemThread | 16 | Utilisez des threads système pour traiter les longues demandes de transfert de fichiers. |
WriteBehind | 4 | Exécutez immédiatement la demande de transfert de fichiers, sans la mettre en attente. Si cet indicateur est spécifié et si le transfert de fichiers réussit, les données sont acceptées par le système, mais pas nécessairement par l'extrémité distante. N'utilisez pas cet indicateur avec les indicateurs Disconnect et ReuseSocket. |
Exemples
L’exemple suivant illustre l’utilisation de TransmitFileOptions
dans un appel à Socket.SendFile. Le fichier « test.txt » se trouve dans le répertoire racine de l’ordinateur local. Dans cet exemple, un prébuffer et un postbuffer de données sont créés et envoyés à l’hôte distant avec le fichier . Pour utiliser le thread par défaut du système, UseDefaultWorkerThread
est spécifié.
// Establish the local endpoint for the socket.
IPHostEntry^ ipHost = Dns::GetHostEntry( Dns::GetHostName() );
IPAddress^ ipAddr = ipHost->AddressList[ 0 ];
IPEndPoint^ ipEndPoint = gcnew IPEndPoint( ipAddr,11000 );
// Create a TCP socket.
Socket^ client = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
// Connect the socket to the remote endpoint.
client->Connect( ipEndPoint );
// Send file fileName to the remote host with preBuffer and postBuffer data.
// There is a text file test.txt located in the root directory.
String^ fileName = "C:\\test.txt";
// Create the preBuffer data.
String^ string1 = String::Format( "This is text data that precedes the file.{0}", Environment::NewLine );
array<Byte>^preBuf = Encoding::ASCII->GetBytes( string1 );
// Create the postBuffer data.
String^ string2 = String::Format( "This is text data that will follow the file.{0}", Environment::NewLine );
array<Byte>^postBuf = Encoding::ASCII->GetBytes( string2 );
//Send file fileName with buffers and default flags to the remote device.
Console::WriteLine( "Sending {0} with buffers to the host.{1}", fileName, Environment::NewLine );
client->SendFile( fileName, preBuf, postBuf, TransmitFileOptions::UseDefaultWorkerThread );
// Release the socket.
client->Shutdown( SocketShutdown::Both );
client->Close();
// Establish the local endpoint for the socket.
IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
// Create a TCP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Connect the socket to the remote endpoint.
client.Connect(ipEndPoint);
// Send file fileName to the remote host with preBuffer and postBuffer data.
// There is a text file test.txt located in the root directory.
string fileName = "C:\\test.txt";
// Create the preBuffer data.
string string1 = String.Format("This is text data that precedes the file.{0}", Environment.NewLine);
byte[] preBuf = Encoding.ASCII.GetBytes(string1);
// Create the postBuffer data.
string string2 = String.Format("This is text data that will follow the file.{0}", Environment.NewLine);
byte[] postBuf = Encoding.ASCII.GetBytes(string2);
//Send file fileName with buffers and default flags to the remote device.
Console.WriteLine("Sending {0} with buffers to the host.{1}", fileName, Environment.NewLine);
client.SendFile(fileName, preBuf, postBuf, TransmitFileOptions.UseDefaultWorkerThread);
// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Close();
Remarques
Notes
Les indicateurs Disconnect
et ReuseSocket
retournent le socket à un état déconnecté et réutilisable après la transmission du fichier. Ces indicateurs ne doivent pas être utilisés sur un socket où la qualité de service (QOS) a été demandée, car le fournisseur de services peut supprimer immédiatement toute qualité de service associée au socket avant la fin du transfert de fichier. La meilleure approche pour un socket compatible QOS consiste à appeler Socket.Close une fois le transfert de fichier terminé, plutôt que de s’appuyer sur ces indicateurs.