[API Proposal]: Add File.Delete and Directory.Delete overloads that specify not found throw behavior
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Stale
- Tech stack
- csharp
- Domain
- api, operating-systems
Research direction
Start by reviewing the linked File.Delete implementation in src/libraries/System.Private.CoreLib/src/System/IO/FileSystem.Windows.cs, then compare the existing File.Delete and Directory.Delete behavior described in the proposal. The work is done when the API design is accepted and the requested not-found behavior is consistently defined for both overloads.
Written by the indexing model from the issue text.
Description
Background and motivation
Currently, File.Delete() never throws on file not found (it swallows the error), and Directory.Delete() always throws if the directory is not found. The former limitation means we need to jump hoops to ensure correctness in a transactional file storage engine and make additional syscalls which impacts perf, and the latter is a perf issue (need to try/catch just to discard the unnecessary exception).
API Proposal
What I would like:
public static class File
{
public static void Delete(string path, bool throwNotFound);
}
public static class Directory
{
public static void Delete(string path, bool recursive, bool throwNotFound);
}
That way I can specify whether I want to be notified if the dir/file does not exist.
API Usage
File.Delete("some/path", true); // throws if "some/path" does not exist
Directory.Delete("some/path", true, false); // does not throw if "some/path" does not exist
Alternative Designs
public static class File
{
public static void Delete(string path, bool ignoreNotFound);
}
public static class Directory
{
public static void Delete(string path, bool recursive, bool ignoreNotFound);
}
Risks
None
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/runtime
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
area-System.Reflection blocking-clean-ci-optional Known Build Error os-mac-os-x untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
area-CodeGen-coreclr untriaged
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
agentic-workflows untriaged
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
area-VM-meta-mono untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
Create parent directories only after the containment check in InstallHelper.TryExtractToDirectory Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PowerShell/PSResourceGet#2056 ·