SkyDrive Synchronizer History
What is SkyDrive
What is SkyDrive Synchronizer
Getting Started
Setting Up The Source Code (coming soon)
SkyDrive Synchronizer Limitations
Microsoft SkyDrive Limitations
Run it from Linux

SkyDrive Synchronizer History

Understanding the reason why SkyDrive Synchronizer was created would probably clarify why it was written in a specific way and how it is evolving.
It all started when massing online storage became free and Microsoft offered their 25GB SkyDrive service. Although online storage is a great idea, the hideous manual processes of uploading all your files is very time consuming especially when you have hundreds of large images that you want to backup (and a slow internet connection).
The SkyDrive Synchronizer application was implemented to copy all files from a local folder to a destination folder on the SkyDrive, thus having an automated way to backup your local files onto your SkyDrive with minimal to no human interaction other than launching the application.
Being a Linux user, the application can also run on cheap hardware with a free Linux distribution that has Mono 2.6.1 or above pre-installed on it.

What is SkyDrive

Most of you would already know about SkyDrive if you are reading this section. Although I realized that not a lot of people know about the SkyDrive service especially that hotmail is the not the “norm” anymore.
SkyDrive is a free 25GB cloud storage offered by Microsoft.
As of this writing SkyDrive does not have any official APIs and no applications that run on Linux.

What is SkyDrive Synchronizer

SkyDrive Synchronizer is a C# command line application that helps users synchronize a local folder to a specific location on their SkyDrive. The aim is to also make it usable on Linux via Mono.
The code is still under development; some features are still missing.

Getting Started

To get SkyDrive running all what you’ll have to do is fill in the information in the ConsoleApplication1.exe.config file:

Your account username

<add key="UserName" value="" />

You account password

<add key="Password" value="your_password" />

Your source folder to be synchronized to the SkyDrive

<add key="StartFolder" value="C:\Source" />

Your destination folder to contain your folder

<add key="DestinationWebFolder" value="\BackUp" />

The time to wait before the application throws an expection while uploading a file in milliseconds

<add key="TimeOut" value="500000" />

Setting Up The Source Code

This section will describe how to set up the project from scratch. More to come...

SkyDrive Synchronizer Limitations

The code is still under development and there is still a lot to be done.
Below are some of the know issues that are still to be resolved:
  1. One way synchronisation: At the moment the application is only copying files to the server and not the other way around.
  2. The current exception handling is ugly; user friendly error messages would look much better.

Microsoft SkyDrive Limitations

Those are limitation from Microsoft SkyDrive that will not be fixed:
  1. File names limitation: files cannot contain any of the following characters: \ / : * ? “ < > | and the semicolon ;
  2. Empty files and files larger than 50mb cannot be uploaded. (this might be fixed by splitting larger files into smaller ones)

Run it from Linux
  1. Download a linux distribution with Mono 2.6.1 or later; for example OpenSuse Live CD
  2. Download the application
  3. Update the config file
  4. Run the application by typing "mono API.WindowsLive.SkyDrive.exe" (without the quotation marks)

Last edited May 16, 2010 at 6:54 AM by voodoor, version 13


Channing Feb 2, 2012 at 10:42 AM 
I get the following error when I execute API.WindowsLive.SkyDrive.exe

Load configuration
Load UI
Log in
Start schedule
Could not log on, please check username and password.
Object reference not set to an instance of an object.
Done press any key to continue

What do I need to add to the Firewall.
What, if any, services required to be running.

jrvilda Oct 19, 2011 at 10:15 PM 
# mono -V
Mono JIT compiler version 2.10.5 (Debian 2.10.5-1)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors.
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: x86
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: Included Boehm (with typed GC and Parallel Mark)

jrvilda Oct 19, 2011 at 10:11 PM 
me the following error when I run:
root@:/home/xxxx/Escritorio/ mono API.WindowsLive.SkyDrive.exe
Load configuration
Load UI
Log in
Start schedule
Missing method UrlEncodeUnicode in assembly /home/josu/Escritorio/, type System.Web.HttpUtility

undefined1 Jan 3, 2011 at 12:24 PM 
How can I set proxy credentials?
I tried with this notation but didn't work for me: <add key="ProxyHost" value="user:password@http://IP_PROXY" />
Some of you have a suggestion?


MarcusWolschon Nov 16, 2010 at 7:12 AM 
mono API.WindowsLive.SkyDrive.exe
Load configuration
Load UI
Log in
Start schedule
Argument cannot be null.
Parameter name: requestUri
Done press any key to continue

Same here.

gonvaro Nov 8, 2010 at 2:11 AM 
It's no fun when things do not work!
This has failed, I followed the instructions and does not work.
Error returns, and there is readable documentation on that error, is what appears in the terminal:
================================================== ====
/ Opt / SkyDriveSync # mono API.WindowsLive.SkyDrive.exe
Load configuration
UI Load
Log in
Start schedule
Argument can not be null.
Parameter name: requestUri
Donate to press any key to continue
/ Opt / SkyDriveSync #
================================================== ====
Here the text of the configuration file (obviously will not tell you my account and password, or routes.)
================================================== ===

<?xml version="1.0" encoding="utf-8" ?>
<!-- The username to connect to the SkyDrive. -->
<add key="UserName" value="my_acount@of_ms_live" />

<!-- The password to connect to the SkyDrive.-->
<add key="Password" value="my_password" />

<!-- The local start folder that will synchronized on the SkyDrive. -->
<add key="StartFolder" value="/local_path" />

<!-- The destination folder where the startfolder is going to reside. -->
<add key="DestinationWebFolder" value="\REMOTE_FOLDER" />

<!-- The timeout variable defines how low the application will wait before throwing a timeout exception.
When uploading large files it's a good idea to have a large number to avoid timeouts especially with a slow internet connection.
The value is in milliseconds.-->
<add key="TimeOut" value="5000000" />

<!-- ProxyOn indicates if a proxy is required to connect to the internet. Possible values are "true" or "false" -->
<add key="ProxyOn" value="false" />

<!-- ProxyHost is the proxy host address used to connect to the internet-->
<add key="ProxyHost" value="" />

<!-- ProxyPort is the proxy port number on which it is listening to the web requests-->
<add key="ProxyPort" value="80" />

<!-- DeleteLocalFiles indicates whether to delete the file on the local drive if the file does not exist on the SkyDrive. Delete web files always starts first if enabled.-->
<add key="DeleteLocalFiles" value="false" />

<!-- DeleteRemoteFiles indicates whether to delete the SkyDrive file if the file does not exist on the local drive. Delete web files always starts first if enabled.-->
<add key="DeleteRemoteFiles" value="true" />

<!-- UpdateLocalFiles indicates whether to redownload the remote file in case the remote file is more recent than the local one-->
<add key="UpdateLocalFiles" value="false" />

<!-- UpdateRemoteFiles indicates whether to reupload the local file in case the local file is more recent than the remote one-->
<add key="UpdateRemoteFiles" value="true" />

<!-- Download indicates whether to download the files from SkyDrive to the local drive. Upload always starts first if enabled-->
<add key="Download" value="false" />

<!-- Upload indicates whether to upload the files from the local drive to the SkyDrive. Upload always starts first if enabled -->
<add key="Upload" value="true" />

<!-- EstimateTime indicates whether to check which files have to uploaded/downloaded before starting the process
The estimate might take some time to check all files but subsequently it will provide a estimate progress on how many files remain to be transfered once-->
<add key="EstimateTime" value="true" />

<!-- MaxFileSize defines what is the maximum size of the file in bytes before it has to split to the file into smaller parts -->
<add key="MaxFileSize" value="50000000" />

<!-- ScheduleOn defines if a scheduler should be on or off. Values are true or false -->
<add key="ScheduleOn" value="false" />

<!-- LoopSchedule defines if a scheduler restart every day. Values are true or false -->
<add key="LoopSchedule" value="false" />

<!-- StartTime when the scheduler should start in the format hh:mm or hh:mm:ss 24h format-->
<add key="StartTime" value="15:04" />

<!-- EndTime When the scheduler should end in the format hh:mm hh:mm:ss 24h format. If the StartTime > EndTime, the EndTime will be stamped with the following day's date-->
<add key="EndTime" value="15:01" />

================================================== ===

Please send me the correct fix is excessively important and very urgent.
It assertive and timely receipt of this correction will depend on the seriousness of this project and I believe them.

Greetings, I know that I did not disappoint.

Flash858 Sep 19, 2010 at 2:43 PM 
I noticed that you had mentioned that currently, there was only a one way sync. I set it all up, and it created a 2 way sync. This may sound odd, but is there a way to actually create a one way sync (upload)?

sankuseal Aug 12, 2010 at 6:54 PM 
thanks for your great effort...

I was just looking for this kind of application...

I will keep updating if I face any problem or error

Thanks again friend