I do not know if this is your cause, but this is a common cause for deframentation problems if you use the basic Windows defragmenter. Therefore, I would recommend that you always use Defraggler as suggested above, or the free Auslogics Disk Deframent
The problem is that if a system file becomes fragmented, it sometimes get mislabelled as moveable, and then when the deframenter tries to move it, it can't, it decides not move on until it becomes available (which it never will), and gets stuck, just as yours did. A good deframenter would not get into this sticky situation, and would move on, but unfortunatly, not for the Windows Defragmenter.
The other time this can occur is when you try to re-size a partition using the Windows Disk Manager, and then you end up with a big corruption when you turn it off, and your data gone, and so, I would not recommend using Windows to re-size a partition (or any operation where you expect the data to remain - any operation involving a format is fine)
This is the likeliest cause, because heaven forbid if you use a file that the Windows Defragmenter wants to move! (It does not have to be a system file, if you are running a program in background, a good defragmenter would just move on)