我目前正在开发一个dll库项目。
if (!Directory.Exists(MenGinPath))
{
Directory.CreateDirectory(MenGinPath + @"TimedMessages");
File.WriteAllLines(MenGinPath + @"TimedMessages\timedmessages.txt", new string[] { "Seperate each message with a new line" });
}
else if (!File.Exists(MenGinPath + @"TimedMessages\timedmessages.txt"))
{
Directory.CreateDirectory(MenGinPath + @"TimedMessages");
File.WriteAllLines(MenGinPath + @"TimedMessages\timedmessages.txt", new string[] { "Seperate each message with a new line" });
}
正如您所看到的,如果语句Directory.Exists
为false,将创建一个特定目录(MenGinPath
)。但是,如果相同的路径,另外一个文件是false,则将调用第二个函数。
我的问题如下:有什么方法可以缩短它吗?
因为你可以看到我正在调用两次相同的功能:
Directory.CreateDirectory(MenGinPath + @TimedMessages\timedmessages.txt
和
File.WriteAllLines(MenGinPath + @"\TimedMessages\timedmessages.txt"))
欢迎任何帮助!!
答案 0 :(得分:2)
由于CreateDirectory在目录存在时不执行任何操作,因此可以缩短代码。此外,不要使用所有字符串连接来填充代码以创建路径和文件名 在使用适当的方法输入逻辑之前,只需执行一次即可创建文件名和路径名(Path.Combine)。
string messagePath = Path.Combine(MenGinPath, "TimedMessages");
string fileName = Path.Combine(messagePath, "timedmessages.txt");
// call the create even if it exists. The CreateDirectory checks the fact
// by itself and thus, if you add your own check, you are checking two times.
Directory.CreateDirectory(messagePath);
if (!File.Exists(fileName)
File.WriteAllLines(fileName, new string[] { "Seperate each message with a new line" });
答案 1 :(得分:2)
您不需要检查目录是否存在,因为如果目录不存在,Directory.CreateDirectory会自动创建目录,如果目录已经存在,则不会执行任何操作。
此外,创建目录时不要包含文件名。是的,它不会出错,只是为了清楚起见。
另一个是使用Path.Combine而不是硬编码路径。这将提高代码的可读性。
所以,这就是我能想到的:
<form method='POST' action='{{route('posts.store')}}'>
答案 2 :(得分:0)
这两种情况之间的唯一区别似乎是路径。所以只需在if-else
中获取此路径const string GroupsPath = @"Groups\timedmessages.txt";
const string TimedMessagesTxt = @"TimedMessages\TimedMessages.txt";
string addPath = null;
if (!Directory.Exists(MenGinPath)) {
addPath = GroupsPath;
} else if (!File.Exists(Path.Combine(MenGinPath, TimedMessagesTxt))) {
addPath = TimedMessagesTxt;
}
If (addPath != null) {
Directory.CreateDirectory(Path.Combine(MenGinPath, addPath));
File.WriteAllLines(Path.Combine(MenGinPath, TimedMessagesTxt),
new string[] { "Seperate each message with a new line" });
}
注意:使用Path.Combine
代替字符串连接可以自动添加或删除missig或额外\
。
答案 3 :(得分:0)
这样的事情会起作用吗?
string strAppended = string.Empty;
if (!Directory.Exists(MenGinPath))
{
strAppended = MenGinPath + @"Groups\timedmessages.txt";
}
else if (!File.Exists(MenGinPath + @"TimedMessages\timedmessages.txt"))
{
strAppended = MenGinPath + @"TimedMessages\TimedMessages.txt";
}
else
{
return;
}
Directory.CreateDirectory(strAppended);
File.WriteAllLines(strAppended, new string[] { "Seperate each message with a new line" });
我发现重用像这样的代码块而不是将它们隐藏在if语句中是一个好主意,因为它使代码维护和调试更容易,并且更不容易错过错误。