Что касается общей архитектуры, я бы рекомендовал следующую структуру в отношении создания каталогов. Это будет охватывать большинство потенциальных проблем, и любые другие проблемы с созданием каталогов будут обнаружены вызовом dir.create
.
mainDir <- "~"
subDir <- "outputDirectory"
if (file.exists(paste(mainDir, subDir, "/", sep = "/", collapse = "/"))) {
cat("subDir exists in mainDir and is a directory")
} else if (file.exists(paste(mainDir, subDir, sep = "/", collapse = "/"))) {
cat("subDir exists in mainDir but is a file")
# you will probably want to handle this separately
} else {
cat("subDir does not exist in mainDir - creating")
dir.create(file.path(mainDir, subDir))
}
if (file.exists(paste(mainDir, subDir, "/", sep = "/", collapse = "/"))) {
# By this point, the directory either existed or has been successfully created
setwd(file.path(mainDir, subDir))
} else {
cat("subDir does not exist")
# Handle this error as appropriate
}
Также имейте в виду, что если ~/foo
не существует, то вызов dir.create('~/foo/bar')
, если вы не укажете recursive = TRUE
.
ICSharpCode. TextEditor свободен и довольно стабилен.
Что касается Actipro коммерческого решения SyntaxEditor мог бы быть лучшим выбором
Испытайте ScintillaNET, это - обертка WinForms.NET вокруг превосходного управления Scintilla. Сам Scintilla является свободным компонентом редактора исходного кода, который очень настраиваем и имеет все функции, которые Вы попросили. Посмотрите здесь для снимка экрана.