[.net]Synchronisation de fichiers pour Windows Mobile
Emilien Martinez | 1 juin 2008 | 21:54Apres plusieurs mois d’absence, partiels et projets oblige, je reviens pour vous présenter une méthode de synchronisation de fichier entre PC et Windows Mobile. Pour cela j’utilise la libraire OpenNETCF.Desktop.Communication, celle-ci permet l’accès et la modification de fichiers depuis une Workstation. Il vous faut donc inclure à votre projet la dll et ensuite utiliser l’objet RAPI.
Celui-ci dispose de quelques méthodes intéressantes telles que la détection de la présence d’un Smartphone, la récupération d’informations propres au téléphone, ou encore la possibilité de créer des processus.
Le code que je vous propose permet la synchronisation de plusieurs fichiers afin d’en récupérer ou transférer la dernière version.
Ce code est basé sur la date de modification d’un fichier.
public static class RAPISynchronisation
{
public static string biDirectionalSynchro(List<string> FileNames)
{
//Params
RAPI synchroObject = new RAPI();
DateTime localLastAcces = DateTime.Now;
DateTime smartphoneLastAcces = DateTime.Now;
DateTime checker = smartphoneLastAcces;
string strPathWorkstationFile = “Repertoire du dossier local”;
//Vérification de la présence de l’appareil
if (!synchroObject.DevicePresent)
{ return “Appareil non-détecté, verifiez que l’appareil est bien connecté”; }
else
{
//Synchro
foreach (string fileName in FileNames)
{
//Connexion au SmartPhone
synchroObject.Connect();
//Vérification de l’existance du dossier smartphone
if (!synchroObject.DeviceFileExists(@”\Smartphone_Destination\”))
{
try
{
//Création du dossier smartphone
synchroObject.CreateDeviceDirectory(@”\Smartphone_Destination\”);
}
catch (Exception ex)
{
return “Impossible de créer le dossier cible”;
}
}
//Récupération des dates de modification des fichiers
if (synchroObject.DeviceFileExists(@”\Smartphone_Destination\”
+ fileName))
{
smartphoneLastAcces = synchroObject.GetDeviceFileTime(@”\Smartphone_Destination\”
+ fileName, RAPI.RAPIFileTime.LastModifiedTime);
}
if (File.Exists(strPathWorkstationFile + fileName))
{
localLastAcces = File.GetLastWriteTime(strPathWorkstationFile + fileName);
}
//Copie Local -> SmartPhone
if (localLastAcces >= smartphoneLastAcces || smartphoneLastAcces == checker)
{
try
{
synchroObject.CopyFileToDevice(strPathWorkstationFile, @”\Smartphone_Destination\”
+ fileName, true);
}
catch (RAPIException ex)
{
return “Impossible de copier sur le périphérique cible”;
}
catch (IOException ex)
{
}
}
//Copie SmartPhone -> Local
else if (localLastAcces < smartphoneLastAcces && smartphoneLastAcces != checker)
{
try
{
synchroObject.CopyFileFromDevice(strPathWorkstationFile
+ fileName, @”\Smartphone_Destination\” + fileName);
}
catch (Exception ex)
{
return “Impossible de copier sur le disque local”;
}
}
}
return “Syncronisation Réalisée”;
}
}
}





