Armazenar Caminho do arquivo como variável para aplicações C # Console
-
21-08-2019 - |
Pergunta
Eu estou tentando criar um aplicativo de console C # que irá gerar um arquivo de log. Eu gostaria de ter alguma flexibilidade com o local onde o arquivo de log será armazenado.
Eu tentei usar o arquivo Settings.settings com:
Nome: logDrive Tipo: string Alcance: aplicação Valor: C: \ Scripts \ Logs
No meu código, estou usando:
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);
Ao compilar o acima eu recebo a mensagem de erro "O formato do caminho dado não é apoio."
Se isso ajuda, os valores para:
logDrive = "C: \ Scripts \ ServiceDesk \ Logs" logFile = "2009/03/23 01:20 PM.log"
Alguém tem alguma opinião / recomendações para uma melhor abordagem e / ou o que estou fazendo de errado?
Solução
Você não pode incluir uma :
em um nome de arquivo. Uma abordagem melhor seria usar um formato como
YYYYMMDD_HHMMSS.log
(por exemplo. 20090323_231245.log
)
Isto tem a vantagem de ser facilmente classificáveis, e não usar quaisquer caracteres inválidos.
Você pode obter isso usando
string logFile = string.Format("{0:yyyyMMdd_HHmmss}.log", DateTime.Now);
Notas:
Além disso, como sugerido nos comentários, você deve considerar o uso Path.Combine
combinar seu diretório e nome do arquivo. Isso ajudará a questões mitigar com finais separadores de caminho, etc.
Outras dicas
Você também vai precisar adicionar uma barra para o seu 'logDrive'. Ou seja:
logDrive = "C:\Scripts\ServiceDesk\Logs\"
.. ou uso Path.Combine como sugerido na outra resposta ??p>