DevToys-app/DevToys · error · FileNotFoundException
Unable to find the indicated file.
Error message
Unable to find the indicated file.
What it means
Thrown by DevToys.MacOS FileStorage.OpenReadFile after resolving a relative path against AppCacheDirectory and finding the file absent via File.Exists. It is the MacOS platform's implementation of the shared IFileStorage.OpenReadFile contract. FileNotFoundException carries the resolved absolute path.
Source
Thrown at src/app/dev/platforms/desktop/DevToys.MacOS/Core/FileStorage.cs:33
{
if (!Path.IsPathRooted(relativeOrAbsoluteFilePath))
{
relativeOrAbsoluteFilePath = Path.Combine(AppCacheDirectory, relativeOrAbsoluteFilePath);
}
return File.Exists(relativeOrAbsoluteFilePath);
}
public FileStream OpenReadFile(string relativeOrAbsoluteFilePath)
{
if (!Path.IsPathRooted(relativeOrAbsoluteFilePath))
{
relativeOrAbsoluteFilePath = Path.Combine(AppCacheDirectory, relativeOrAbsoluteFilePath);
}
if (!File.Exists(relativeOrAbsoluteFilePath))
{
throw new FileNotFoundException("Unable to find the indicated file.", relativeOrAbsoluteFilePath);
}
return new FileStream(relativeOrAbsoluteFilePath, FileMode.Open, FileAccess.Read, FileShare.Read,
SandboxedFileReader.BufferSize, FileOptions.Asynchronous | FileOptions.SequentialScan);
}
public FileStream OpenWriteFile(string relativeOrAbsoluteFilePath, bool replaceIfExist)
{
if (!Path.IsPathRooted(relativeOrAbsoluteFilePath))
{
relativeOrAbsoluteFilePath = Path.Combine(AppCacheDirectory, relativeOrAbsoluteFilePath);
}
if (File.Exists(relativeOrAbsoluteFilePath) && replaceIfExist)
{
File.Delete(relativeOrAbsoluteFilePath);
}
View on GitHub (pinned to 7e12df8448)
Solutions
- Call IFileStorage.FileExists(path) right before OpenReadFile and branch on the result.
- Inspect the resolved path (AppCacheDirectory + relative) to confirm it is inside the expected container.
- For security-scoped resources, start accessing the security-scoped bookmark before reading.
- Ensure OpenWriteFile completed and the file was flushed/closed before reading.
- Catch FileNotFoundException and recover (recreate, reprompt, skip).
Example fix
// before
using FileStream stream = fileStorage.OpenReadFile(relativePath);
// after
if (!fileStorage.FileExists(relativePath))
{
return; // or recreate / reprompt
}
using FileStream stream = fileStorage.OpenReadFile(relativePath); Defensive patterns
Strategy: validation
Validate before calling
string resolved = Path.IsPathRooted(path) ? path : Path.Combine(fileStorage.AppCacheDirectory, path);
if (!File.Exists(resolved))
{
return; // or recreate / reprompt
}
using FileStream stream = fileStorage.OpenReadFile(path); Try / catch
try
{
using FileStream stream = fileStorage.OpenReadFile(path);
}
catch (FileNotFoundException ex)
{
// expected missing file — recreate or skip
} Prevention
- Precede OpenReadFile with FileExists; on MacOS also confirm the path is inside the sandbox container or a valid security-scoped resource.
- For security-scoped bookmarks, call StartAccessingSecurityScopedResource before reading and stop after.
- Log the resolved path so missing files are easy to diagnose across launches.
- Ensure OpenWriteFile completed before the consumer reads.
When it happens
Trigger: Calling IFileStorage.OpenReadFile with a relative path that does not exist under AppCacheDirectory; an absolute path to a missing file; a file removed between the existence check and the open (TOCTOU); a sandboxed app trying to read outside its container without entitlement.
Common situations: App sandbox container path changed across launches; a file the app expected to find in its cache/ was evicted; a path from a security-scoped bookmark whose resource is gone; producer step failed so the file was never written.
Related errors
- Unable to find the indicated file.
- Unable to find the indicated file.
- Unable to find the indicated file.
- Unable to find the indicated file.
- WebKitGTK could not be found. Please verify that the package
AI-assisted analysis of DevToys-app/DevToys@7e12df8448 (2026-08-13).
Data as JSON: /api/errors/c082264913149e0e.
Report an issue: GitHub.