Exception codes, or detecting a "file already exists" type exception
try
{
using (var stream = new FileStream("C:\\Test.txt", FileMode.CreateNew))
using (var writer = new StreamWriter(stream))
{
//write file
}
}
catch (IOException e)
{
var exists = File.Exists(@"C:\Text.text"); // =)
}
Won't work for temp files etc which might have been deleted again.
Here are my exception best practices: https://coderr.io/exception-handling
You can place this condition in your catch statement for IOException: if(ex.Message.Contains("already exists")) { ... }
. It is a hack, but it will work for all cases that a file exists, even temporary files and such.
Edit: there is another Hresult that is used when file already exists: 0x800700B7 (-2147024713)
"Cannot create a file when that file already exists". Updated the code sample.
When you try to create a new file and it already exists IOException will have Hresult = 0x80070050 (-2147024816)
.
So you code could look like this:
try
{
using (var stream = new FileStream("C:\\Test.txt", FileMode.CreateNew))
using (var writer = new StreamWriter(stream))
{
//write file
}
}
catch (IOException e)
{
if (e.HResult == -2147024816 ||
e.HResult == -2147024713)
{
// File already exists.
}
}