以下はアセンブリファイルのあるディレクトリの親ディkレクト下に,"Log"ディレクトを作成します。
DirectoryInfo dirInfo = Directory.GetParent(Assembly.GetEntryAssembly().Location);
DirectotyInfo dirBase = Directoty.GetParent(dirInfo.FullName);
DirectoryInfo dirTarget = dirBase.CreateSubdirectory("Log");
string fileName = string.Format("Data{0}.Log", DateTime.Now.ToString("yyyyMMddTHHmmss"));
string fullPath = Path.Combine(dirTarget.FullName, fileName);
Utility.cs
using System;
using System.IO;
using System.Reflection;
namespace EUtility
{
public class Utility
{
/// <summary>
/// アセンブリ(.exe)のある親ディレクト下に指定した名前のディレクトを作成してそのパスを返します。
/// たとえば bin\foo.exeから呼び出すとbinと兄弟レベルのディレクトを作成します。
/// </summary>
/// <param name="subDirName">サブディレクト</param>
/// <returns></returns>
public static string GetAssemblyParentSubPath(string subDirName)
{
if (subDirName == null)
throw new ArgumentNullException("subDirName");
DirectoryInfo dirInfo = Directory.GetParent(Assembly.GetEntryAssembly().Location);
DirectoryInfo dirBase = dirInfo.Parent;
string target = Path.Combine(dirBase.FullName, subDirName);
if ( ! Directory.Exists(target))
{
Directory.CreateDirectory(target);
}
return target;
}
/// <summary>
/// アセンブリ(.exe)のある親ディレクト下に指定した名前のディレクトを作成し,
/// filenameを付加してfullpathを返します。
/// </summary>
/// <param name="subDirName">サブディレクト名</param>
/// <param name="filename">ファイル名</param>
/// <returns></returns>
public static string GetAssemblyParentSubFile(string subDirName, string filename)
{
if (subDirName == null)
throw new ArgumentNullException("subDirName");
if (filename == null)
throw new ArgumentNullException("filename");
return Path.Combine(GetAssemblyParentSubPath(subDirName), filename);
}
}
}