I'm looking for help deciding the setup for server and client for our non-profit organization. There will be 1 server and multiple users using a C# application. Here are some insights and requirements:

  • The server will act as cloud file storage and the users will be using a C# application (Windows 10+, WinUI 3) locally from different networks and computers.
  • We have a staff member that updates these files and he needs to upload them to the cloud storage via a web browser.
  • There needs to be versioning as the local files need to be ALWAYS on sync with the cloud. For instance if one file is different than the cloud setup (the c# client/application needs to check this), this file should be downloaded so that local file can be in sync with cloud version.

For cloud storage, we tried ownCloud and using WebDAV packages for the C# application. However there are several issues:

  • the WebDAV packages do not have functionality to make a comparison between local and cloud and if it's changed, old or does not exist, download this file.
  • ownCloud website mentions versioning for files however I was not able to find more about is and how to use it. Especially with a C# application.

I know there is ownCloud's own client application however we are using a C# application developed for our organization and this file checking/transfer/updating and sync process needs to be done by this app.

What are your suggestions for this kind of setup? Both for the server and application? The language of the application cannot be changed but for sure there is other protocols and packages that should help solve this issue. Cloud storage services should be a good example for this.

Thank you.


1 Answer 1


My proposal is SVN. It is specifically made for versioning.

You don't need some of its features like branching and merging. Simply work on the trunk only.

SVN deals nicely with binary files, also larger ones. My largest repository has ~4000 binary files with a size of 30 GB and I have no problems. Unlike Git, which seems to need Git LFS for larger files.

It's safe. You can't really delete data, unlike Git, where you can squash and force push and other dangerous operations. I never lost data with SVN.

SVN has a feature called "Get lock", which allows you to work on files exclusively. This sounds suitable for your task.

In order to achieve "ALWAYS in sync", you need to make sure that the files are unusable while your application is not running. That means they either need to be deleted or encrypted. Also, you must make sure that your application does not allow file access when it is offline.

The server side setup is quite simple. I am using FSFS and serve that over Apache. But there are various guides available.

I can't recommend a library for C#, since I have never used one. In the worst case you can use the command line application.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.