Giter Site home page Giter Site logo

freemove's Introduction

FreeMove

license

Move directories freely without breaking installations or shortcuts

You can use this tool to move programs that install on C:\ by default to another drive to save space on your main drive

How It works

  1. The files are moved to the new location
  2. A symbolic link is created from the old location redirecting to the new one. Any program trying to access a file in the old location will automatically be redirected to its new location

Download

Github All Releases

From GitHub

Download the latest release

From Scoop

scoop install freemove

Usage

Run the executable and use the GUI

Note: this program requires administrator privileges for its core functionality

Recommendations

You should not move important system directories as they can break core functionalities like Windows Update and Windows Store Apps.

C:\Users - C:\Documents and Settings - C:\Program Files - C:\Program Files (x86) should not be moved. If you wish to do It anyway do it at your own risk. To move a directory back refer to the last part of the readme.

That said, moving directories contained in the previously mentioned directories should not cause any problem. So you are free to move C:\Program Files\HugeProgramIDontWantOnMySSD without any problem.

Screenshots

Screenshot

Uninstalling moved programs

Uninstall the program just as you would normally without deleting the junction. The uninstaller will work normally leaving an empty directory in the location you moved the program to, and the directory link in the original location, both of which you can then delete manually

Moving back a program

Delete the junction in the old location (this won't delete the content) and move the directory back to its original position

Contributing

The project is currently being maintained for fixes, but no new features are currently in development or planned.

I wrote the tool alone and I am currently the only developer, at the moment I'm pursuing my PhD and I'm too busy with other projects to work on new features.

I'll keep watching the project and managing possible contributions, so, if you are interested in contributing, leave an issue or comment on an open issue and let me know!

freemove's People

Contributors

imdema avatar nitrocode avatar qzo avatar zevell avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

freemove's Issues

Publishing as single file results in path exception

A quick note: I figured I would make an issue to let you know that the pre-release version of FreeMove gives this exception, and that's why I did some testing and found a fix/workaround. Hopefully, this helps!

The publish option I am talking about can be seen at the bottom of this image. The "Produce single file" checkbox.
image

I downloaded the latest GitHub commits but changed the dotnet version to 6.0, as seen here:
image

And the exception I get upon running the resulting executable:
image

This exception does not happen when unchecking "Produce single file", re-publishing, and running the resulting executable.

Error : Method not found

I cannot move anything from C:\ to another drive
It shows Method not found : '!!0[] System.Array.Empty()'.
What should i do? T_T

20201006_200823

halts with error on write protected files

seems like git dirs is extra pesky
I suggest some sort of force feature where everything that can be moved get moved, then copy anything that's left, finally purge the original spot and link to it.

How to Undo a move?

I just tried the program and moved my email client Mozilla Thunderbird from C: to D:.
The FreeMove program did it fine. However, Thunderbird does not find its configurations and saved messages anymore. So I prefer to undo this move. How to bring the move back again to the original directory, since the original directory on drive C now appears a shortcut only?
Thanks.

Alterar linha do programa

Preciso adequar a possibilidade de mudar linha do programa para não mover a pasta do arquivo original....

Error while trying to copy C:\Users\<User>

Hello! I try copy my user folder and catch error:
Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.AggregateException: Произошла одна или несколько ошибок. ---> System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Users\Dmitriy\NetHood".
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
в System.IO.FileSystemEnumerableIterator1.CommonInit() в System.IO.FileSystemEnumerableIterator1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler1 resultHandler, Boolean checkHost) в System.IO.Directory.GetFiles(String path) в FreeMove.Form1.<>c__DisplayClass5_0.<CheckFolders>b__1(String dir) в System.Threading.Tasks.Parallel.<>c__DisplayClass30_02.b__0(Int32 i)
в System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() в System.Threading.Tasks.Task.InnerInvoke() в System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) в System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object ) --- Конец трассировки внутреннего стека исключений --- в System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) в System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) в System.Threading.Tasks.Task.Wait() в System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Func4 bodyWithLocal, Func1 localInit, Action1 localFinally)
в System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](TSource[] array, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Action3 bodyWithStateAndIndex, Func4 bodyWithStateAndLocal, Func5 bodyWithEverything, Func1 localInit, Action1 localFinally) в System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable1 source, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Action3 bodyWithStateAndIndex, Func4 bodyWithStateAndLocal, Func5 bodyWithEverything, Func1 localInit, Action1 localFinally) в System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable1 source, Action1 body) в FreeMove.Form1.CheckFolders(String source, String destination) в FreeMove.Form1.Begin() в FreeMove.Form1.Button_Move_Click(Object sender, EventArgs e) в System.Windows.Forms.Control.OnClick(EventArgs e) в System.Windows.Forms.Button.OnClick(EventArgs e) в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) в System.Windows.Forms.Control.WndProc(Message& m) в System.Windows.Forms.ButtonBase.WndProc(Message& m) в System.Windows.Forms.Button.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ---> (Внутреннее исключение #0) System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Users\Dmitriy\NetHood". в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) в System.IO.FileSystemEnumerableIterator1.CommonInit()
в System.IO.FileSystemEnumerableIterator1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler1 resultHandler, Boolean checkHost)
в System.IO.Directory.GetFiles(String path)
в FreeMove.Form1.<>c__DisplayClass5_0.b__1(String dir)
в System.Threading.Tasks.Parallel.<>c__DisplayClass30_02.<ForEachWorker>b__0(Int32 i) в System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
в System.Threading.Tasks.Task.InnerInvoke()
в System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
в System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---

---> (Внутреннее исключение #1) System.AggregateException: Произошла одна или несколько ошибок. ---> System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Users\Dmitriy\Searches\Everywhere.search-ms".
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
в System.IO.FileInfo.Open(FileMode mode, FileAccess access, FileShare share)
в FreeMove.Form1.<>c__DisplayClass5_0.g__CheckFile|2(String file)
в FreeMove.Form1.<>c__DisplayClass5_0.b__3(String file)
в System.Threading.Tasks.Parallel.<>c__DisplayClass30_02.<ForEachWorker>b__0(Int32 i) в System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
в System.Threading.Tasks.Task.InnerInvoke()
в System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
в System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )
--- Конец трассировки внутреннего стека исключений ---
в System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
в System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
в System.Threading.Tasks.Task.Wait()
в System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Func4 bodyWithLocal, Func1 localInit, Action1 localFinally) в System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](TSource[] array, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Action3 bodyWithStateAndIndex, Func4 bodyWithStateAndLocal, Func5 bodyWithEverything, Func1 localInit, Action1 localFinally)
в System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable1 source, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Action3 bodyWithStateAndIndex, Func4 bodyWithStateAndLocal, Func5 bodyWithEverything, Func1 localInit, Action1 localFinally)
в System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable1 source, Action1 body)
в FreeMove.Form1.<>c__DisplayClass5_0.b__1(String dir)
в System.Threading.Tasks.Parallel.<>c__DisplayClass30_02.<ForEachWorker>b__0(Int32 i) в System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
в System.Threading.Tasks.Task.InnerInvoke()
в System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
в System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )
---> (Внутреннее исключение #0) System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Users\Dmitriy\Searches\Everywhere.search-ms".
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
в System.IO.FileInfo.Open(FileMode mode, FileAccess access, FileShare share)
в FreeMove.Form1.<>c__DisplayClass5_0.g__CheckFile|2(String file)
в FreeMove.Form1.<>c__DisplayClass5_0.b__3(String file)
в System.Threading.Tasks.Parallel.<>c__DisplayClass30_02.<ForEachWorker>b__0(Int32 i) в System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
в System.Threading.Tasks.Task.InnerInvoke()
в System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
в System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
<---

************** Загруженные сборки **************
mscorlib
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3260.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll

FreeMove
Версия сборки: 1.5.0.0
Версия Win32: 1.5.0
CodeBase: file:///D:/Work/Tools/FreeMove.exe

System.Windows.Forms
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3260.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3314.0 built by: NET472REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Drawing
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3190.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3190.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Core
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3260.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Xml
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3190.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

mscorlib.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3190.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll

System.Windows.Forms.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.7.3190.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

Например:

При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном.

Please add single file mklink support

This soltware is very handy and useful! But sometimes I just want to move single file instead of a folder. In this situation I have to open cmd.exe and type mklink commands even though it's inconvenient.

文件拖拽

能否将文件或文件夹直接拖拽进去(直接识别目录)

Error while trying to copy C:\Program Files

When the program tries to copy a file from the AntiVirus folder, it throws this exception "System.AggregateException: Se han producido uno o varios errores. ---> System.AggregateException: Se han producido uno o varios errores. ---> System.UnauthorizedAccessException: Acceso denegado a la ruta de acceso 'C:\Program Files\Norton Security\isolate.ini'.", saying that the computer denied the access to that file.
I think a solution is asking the user to skip this file.

CRASH: FreeMove errors & freezes moving C:/ProgramData folder on Win 10

  1. Start FreeMove Task: Source (C:/ProgramData) =>Target (E:/)
  2. FreeMove proceeds, copying files to target
  3. FreeMove error message, Can't move folder C:/ProgramData/Application Data/. Continue or Cancel?
  4. Choose Continue
  5. Moving files progress animation continues, but no files are moved
  6. Kill FreeMove.exe process with TaskManager

I didn't get to copy the debug contents in the FreeMove error message. If it helps, I've attached the 3 messages from the Windows Event Viewer.

The folder FreeMove choked on is a hidden folder called Application Data. It is a junction already and its target is C:/ProgramData. I don't know what its purpose is in that folder; it may be new to Win 10. But, if FreeMove tried to move its contents, it would lead to an infinite recursive loop.

I have a couple of suggestions that might help:

  1. FreeMove could identify any junctions it encounters and copy without expanding them.
  2. FreeMove could create individual junctions for each folder in the parent folder, instead of creating 1 junction for the parent folder
  3. FreeMove could offer the user a more fine-grained file selection interface, thereby allowing the move of a parent folder with many sub-folders without having to run a FreeMove job on each sub-folder.

FreeMove-WinApplicationLogs-20170429.xml.txt

Cancel Button

A Cancel button would be appreciated (maybe i'll do a pull request later), found myself starting a copy and figuring out I was copying files in the wrong folder and there is not way to stop the process. Had to wait until it finishes and then move files back and re-run the program.

A subdirectory of the same name are created when moved

There is a problem I encountered using FreeMove. I think the definition of "To:" is not so clear.
For example, when I set "From" to "C:\example", and "To" to "D:\example", the result is "D:\example\example", which went beyond my expectations and caused some trouble.
I suppose that if we find out the last part of two paths are the same, we can directly move the source folder to the destination instead of to the subfolder under the parent folder of the same name.

Is a new version planned?

I find your program very interesting but there have been no updates since January 2020, have you stopped development?

Thanks,

Christophe

Not an issue, only a wondering ...

Hi,

I read an article about FreeMove on gHacks. FreeMove is going to come in really handy.

I am wondering about two things, related I guess to directory junctions.

1- How to proceed to revert a moved directory back to its original location (to remove the junction in fact)?
2- When uninstalling a program which has had any of its folders moved, any issues? Should I remove the junction first (as within point (1) above)?

Thanks for your help.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.