duplicati/duplicati · warning · FileMissingException
File not found: {remotename}
Error message
File not found: {remotename} What it means
Thrown in Filejump.GetAsync when FindFileEntryIdAsync(remotename) returns null. It is a FileMissingException, which Duplicati maps to a recoverable 'file not present' state rather than a hard fault. The lookup happens after GetClient succeeds and before any download bytes flow.
Source
Thrown at Duplicati/Library/Backend/Filejump/Filejump.cs:293
cache[result.FileEntry.Name] = new(result.FileEntry.Id, result.FileEntry.Url);
}
///<inheritdoc/>
public async Task GetAsync(string remotename, string filename, CancellationToken token)
{
using var fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
await GetAsync(remotename, fs, token);
}
///<inheritdoc/>
public async Task GetAsync(string remotename, Stream stream, CancellationToken token)
{
var client = await GetClient(token);
var entry = await FindFileEntryIdAsync(remotename, token);
if (entry == null)
throw new FileMissingException($"File not found: {remotename}");
var url = entry.Url;
if (!url.StartsWith("/") && !url.StartsWith("http", StringComparison.OrdinalIgnoreCase))
url = "/" + url;
var response = await Utility.Utility.WithTimeout(m_timeoutOptions.ShortTimeout, token,
ct => client.SendAsync(new HttpRequestMessage(HttpMethod.Get, url), HttpCompletionOption.ResponseHeadersRead, ct));
response.EnsureSuccessStatusCode();
using var timeoutStream = stream.ObserveWriteTimeout(m_timeoutOptions.ReadWriteTimeout);
await response.Content.CopyToAsync(timeoutStream, token);
}
/// <summary>
/// Parses the date time from the string returned by the API (ISO-8601 format).
/// </summary>
/// <param name="timestamp">The timestamp to parse</param>
/// <returns>>The parsed date time</returns>
private static DateTime ParseDateTime(string timestamp)
View on GitHub (pinned to 3f348be3e3)
Solutions
- List the remote folder to confirm whether the file exists and under what exact name/case.
- If the file was legitimately removed, let Duplicati's missing-file handling proceed (it re-uploads on the next backup run).
- Check for case mismatch between the local dbblock name and the remote entry; normalize naming if needed.
- If the file should exist, re-run the backup upload step to recreate it.
Defensive patterns
Strategy: try-catch
Try / catch
try { await backend.GetAsync(remotename, dest, token); }
catch (FileMissingException) { /* Duplicati recovers: re-upload on next run; optionally log */ } Prevention
- Keep remote and local names case-consistent.
- Run periodic listed-only backups to sync Duplicati's view of remote files.
- Avoid manually deleting files from the Filejump folder.
When it happens
Trigger: A GET is requested for a remotename that is not present in the Filejump folder (neither in the cache table nor found by a fresh listing). The cache lookup and the on-server search both came back empty.
Common situations: The file was already deleted (e.g. a retention purge removed it). The remotename case or path does not match exactly (Filejump is case-sensitive). A previous upload failed silently so the file was never actually stored. Another tool/session deleted the file between list and get.
Related errors
- File '{remotename}' not found.
- Get failed
- Folder not found: {m_path}
- File '{oldname}' not found.
- File {remotename} not found in Movistar Cloud.
AI-assisted analysis of duplicati/duplicati@3f348be3e3 (2026-08-13).
Data as JSON: /api/errors/3682fbd72f1b5ff3.
Report an issue: GitHub.