C#コンソールアプリケーションのための変数として格納したファイルのパス

StackOverflow https://stackoverflow.com/questions/674373

質問

私は、ログファイルを生成しますC#コンソールアプリケーションを作成しようとしています。私は、ログファイルが格納される場所である程度の柔軟性を持っているしたいと思います。

私はとSettings.settingsファイルを使用してみました

名称:logDrive タイプ:文字列 対象範囲:アプリケーション 値:C:ログ\ \スクリプト

私のコードでは、私が使用しています:

string logFile = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
logFile = logFile.Replace(@"/", @"-").Replace(@"\", @"-") + ".log";
string logDrive = Properties.Settings.Default.logDrive;
StreamWriter output = new StreamWriter(logDrive + logFile);

私は、エラーメッセージを取得上記コンパイルする場合、「与えられたパスのフォーマットがサポートされていませんが。」

それが助け場合は、の値ます:

logDrive = "C:のServiceDesk \ログ\スクリプト\" LOGFILE = "2009年3月23日午前1時20 PM.log"

誰がどんな考えを持っています/より良いアプローチのための勧告および/または私が間違ってやってる?

役に立ちましたか?

解決

あなたはファイル名に:を含めることはできません。より良いアプローチは、

のような形式を使用するかもしれません
YYYYMMDD_HHMMSS.log

(例えば20090323_231245.log

これは、簡単にソート可能であるという利点を持っており、それは無効な文字を使用しません。

あなたが使用してこれを取得することができます。

string logFile = string.Format("{0:yyyyMMdd_HHmmss}.log", DateTime.Now);

注:

また、コメントで提案されているように、あなたはあなたのディレクトリとファイル名を組み合わせることPath.Combineを使用することを検討すべきです。これは、パスの区切りなどを末尾の問題を軽減するのに役立ちます。

他のヒント

また、あなたの「logDrive」に末尾にスラッシュを追加する必要があります。すなわちます:

logDrive = "C:\Scripts\ServiceDesk\Logs\"

..または

他の回答で提案されているようPath.Combineを使用
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top