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.
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…
AI-assisted analysis of DevToys-app/DevToys@7e12df8448 (2026-08-13).
Data as JSON: /api/errors/c082264913149e0e.
Report an issue: GitHub.
Appendix: 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)