Uno dei più fastidiosi bug da bonehead in cui mi imbatto è provare a creare un nuovo file in una directory che non esiste. (Almeno su Windows / NTFS, non sono sicuro di altre combinazioni OS / FS.)
Ecco come avviene di solito in C #:
const string directoryName = @"logDir\";
// This would prevent the exceptions.
//Directory.CreateDirectory(directoryName);
const string logMessage = "Logging a line!";
try
{
const string fileName = directoryName + "Log.txt";
File.AppendAllText(fileName, logMessage + Environment.NewLine);
}
catch (DirectoryNotFoundException)
{
Console.WriteLine("Yup, complaining about directory not found when trying to append.");
}
try
{
const string databaseName = directoryName + "Log.sqlite";
using (var connection = new SQLiteConnection($"Data Source={databaseName};Version=3;"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "CREATE TABLE IF NOT EXISTS log(message); INSERT INTO log(message) VALUES(@message);";
command.Parameters.AddWithValue("@message", logMessage);
command.ExecuteNonQuery();
}
connection.Close();
}
}
catch (SQLiteException)
{
Console.WriteLine("Yup, even sqlite, which will create the file if it doesn't exist, requires a separate step to create a directory.");
}
Se l'API fornisce la possibilità di aggiungere file o crearli se non esiste, perché la stessa capacità non creerebbe anche la directory richiesta se non esiste? Qual è la logica alla base di un simile comportamento?
Potrebbe essere una domanda stupida, ma dovevo chiederti perché sono infastidito quando è necessario un passaggio extra facile da eseguire perché il codice funzioni correttamente e non ne vedo i benefici.