Radarr/Radarr · error · FileNotFoundException
Movie file path does not exist
Error message
Movie file path does not exist
What it means
MovieFileMovingService.TransferFile resolves the source path (movieFile.Path, else movie.Path + RelativePath) and verifies it exists; if missing it throws FileNotFoundException with the resolved path as the fileName.
Source
Thrown at src/NzbDrone.Core/MediaFiles/MovieFileMovingService.cs:112
_logger.Debug("Attempting to hardlink movie file: {0} to {1}", movieFile.Path, filePath);
return TransferFile(movieFile, localMovie.Movie, filePath, TransferMode.HardLinkOrCopy, localMovie);
}
_logger.Debug("Copying movie file: {0} to {1}", movieFile.Path, filePath);
return TransferFile(movieFile, localMovie.Movie, filePath, TransferMode.Copy, localMovie);
}
private MovieFile TransferFile(MovieFile movieFile, Movie movie, string destinationFilePath, TransferMode mode, LocalMovie localMovie = null)
{
Ensure.That(movieFile, () => movieFile).IsNotNull();
Ensure.That(movie, () => movie).IsNotNull();
Ensure.That(destinationFilePath, () => destinationFilePath).IsValidPath(PathValidationType.CurrentOs);
var movieFilePath = movieFile.Path ?? Path.Combine(movie.Path, movieFile.RelativePath);
if (!_diskProvider.FileExists(movieFilePath))
{
throw new FileNotFoundException("Movie file path does not exist", movieFilePath);
}
if (movieFilePath == destinationFilePath)
{
throw new SameFilenameException("File not moved, source and destination are the same", movieFilePath);
}
movieFile.RelativePath = movie.Path.GetRelativePath(destinationFilePath);
if (localMovie is not null)
{
localMovie.FileNameBeforeRename = movieFile.RelativePath;
}
if (localMovie is not null && _scriptImportDecider.TryImport(movieFilePath, destinationFilePath, localMovie, movieFile, mode) is var scriptImportDecision && scriptImportDecision != ScriptImportDecision.DeferMove)
{
if (scriptImportDecision == ScriptImportDecision.RenameRequested)
{View on GitHub (pinned to ca451608dc)
Solutions
- Trigger a rescan/refresh of the movie so on-disk state and DB paths agree.
- Verify the movie's path and the file's RelativePath are correct in the DB.
- Ensure the source share is mounted, then retry the import/move.
Example fix
// before: moving from a stale DB path
_transferService.TransferFile(movieFile, movie, dest, TransferMode.Move);
// after: reconcile existence first
var src = movieFile.Path ?? Path.Combine(movie.Path, movieFile.RelativePath);
if (!_diskProvider.FileExists(src)) { await _movieService.RefreshMovieInfo(movie); return; }
_transferService.TransferFile(movieFile, movie, dest, TransferMode.Move); Defensive patterns
Strategy: validation
Validate before calling
var src = movieFile.Path ?? Path.Combine(movie.Path, movieFile.RelativePath);
if (!_diskProvider.FileExists(src)) { await RefreshMovie(movie); return; } Type guard
static bool IsSourcePresent(IDiskProvider d, MovieFile f, Movie m){ var p = f.Path ?? Path.Combine(m.Path, f.RelativePath); return d.FileExists(p); } Prevention
- Refresh/rescan before moves when files may have moved externally.
- Keep RelativePath consistent with disk.
- Ensure shares stay mounted during transfers.
When it happens
Trigger: TransferFile is invoked when the resolved source movie file does not exist on disk — file already moved/renamed externally, DB out of sync with disk, or a wrong relative path.
Common situations: Files moved or renamed outside Radarr, an interrupted earlier import that left the DB inconsistent, network share reconnecting with a different layout, or a migration that changed paths.
Related errors
- File not moved, source and destination are the same
- Directory doesn't exist. {path}
- File doesn't exist: {path}
- Source and destination can't be the same {0}
- File already exists
AI-assisted analysis of Radarr/Radarr@ca451608dc (2026-08-13).
Data as JSON: /api/errors/e876d1ecc9de3549.
Report an issue: GitHub.