Access single file from different threads or processes and maintain consistensy without using extra locks
Sometimes you want to access a single file from different processes or threads and maintain its consistency. The example may be a common database or just a counter. When the file is opened in read-only mode, the question is trivial. But what if you want to write from different threads? Here is the code sample. The idea is to use File.Open constructor with the FileShare.None option. This option allows only one thread to access the file (either for reading or writing) and deny all other threads. The other threads should catch IOException and try to access the file subsequently with a random delay.
[Code Snippet] Parse FB2 format book in C#
Here is the actual code snippet to parse FB2 format book using C#. FB2 File format is known as FictionBook format. FB2 is rather simple file format based on XML and basic HTML. The FB2 file contains sections. Sections can contain other sections as well as paragraphs. Paragraphs contain actual text and basic formatting.
The program below loads all sections recursively and print their names to console. Also one can use the fb2verse variable to get the actual text of the paragraph. The approach below uses the XDocument class to get the XElements. The only trick with further parsing is to use the correct XNamespace.
How to shutdown a computer programmatically in Windows
If you are writing some installer application, want to update system files, apply settings of for some other reason, you may need to shutdown (reboot, power off) a Windows 10 computer. The good news is that Windows has a pretty straightforward API for this intent, which is called ExitWindowsEx. It has only two parameters. The first one is the flags parameter which you can set to either reboot or power-off and the second one - the reboot reason, which is only used on servers and is not mandatory. But the bad news is that the functions won't work as-is. In order to make it work, you need to enable the shutdown privilege, which is disabled by default. I advise you to enable this privilege only directly before you decide to shut down.