[英]How to get initial path of exe in c# console application
所以总结一下,我正在制作一个应该在 exe 文件夹中查找 txt 的程序,如果它没有找到 txt,它将创建它,当我运行程序时,txt 不存在。 这就是我获得exe的目录/路径的方式:
string dir = AppDomain.CurrentDomain.BaseDirectory;
所以我尝试将“dir”写入控制台,它为我提供了目录:
C:\Users\alvin\AppData\Local\Temp.net\GlosFörhör\gbmh2ttz.bkf\glosor.txt
它位于 windows 临时文件夹中。 我猜控制台应用程序在 windows 临时目录中运行。 但我需要的是实际 exe 文件的目录/路径。 我怎样才能做到这一点?
继承人的代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace GlosFörhör
{
class Program
{
static void Main(string[] args)
{
string[] lang1 = { "word1", "word2", "g", "a", "d" };
string[] lang2 = { "word1", "word2", "g", "a", "d" };
bool running = true;
bool firstTime = true;
while (running)
{
if (firstTime)
{
main(lang1, lang2);
running = false;
}
}
void main(string[] lang1, string[] lang2)
{
Console.WriteLine(getValidTxt());
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
Console.ReadLine();
int[] choiceSeed = getChoiceSeed(lang1);
lang1 = followSeed(choiceSeed, lang1);
lang2 = followSeed(choiceSeed, lang2);
int score = 0;
for (int m = 0; m < lang1.Length; m++)
{
Console.WriteLine(lang1[m]);
string input = Console.ReadLine();
if (input.ToLower() == lang2[m].ToLower())
{
Console.WriteLine("Rätt!");
score++;
}
else
{
Console.WriteLine("Tyvärr, fel :(");
}
}
Console.WriteLine();
Console.WriteLine("Du fick " + score + " rätt av " + lang1.Length + " möjliga.");
Console.ReadLine();
}
int[] getChoiceSeed(string[] input)
{
var iL = new List<string>(input);
var rL = new List<int>();
var intL = new List<int>();
for (int t = 0; t < input.Length; t++)
{
intL.Add(t);
}
for (int t = 0; t < input.Length; t++)
{
Random rnd = new Random();
int tmpIDX = rnd.Next(0, (iL.Count));
rL.Add(intL[tmpIDX]);
iL.RemoveAt(tmpIDX);
intL.RemoveAt(tmpIDX);
}
int[] r = rL.ToArray();
return r;
}
string[] followSeed(int[] seed, string[] input)
{
var rL = new List<string>();
foreach (int i in seed)
{
rL.Add(input[i]);
}
string[] r = rL.ToArray();
return r;
}
string getValidTxt()
{
string dir = AppDomain.CurrentDomain.BaseDirectory;
if (File.Exists("glosor.txt"))
{
return dir + "glosor.txt";
}
else
{
int txtCnt = 0;
var txts = new List<string>();
DirectoryInfo di = new DirectoryInfo(dir);
foreach (FileInfo file in di.GetFiles())
{
if (file.ToString().Substring(file.ToString().Length - 4) == ".txt")
{
txtCnt++;
txts.Add(file.ToString());
}
}
if (txtCnt > 0)
{
return dir + txts[0];
}
else
{
File.Create(dir + "glosor.txt");
Environment.Exit(0);
return dir + "glosor.txt";
}
}
}
}
}
}
该程序应该接收两个 arrays 单词(lang1 和 lang2)并将它们打印到控制台并“检查”用户以另一种语言编写它们,这对于例如功课很有用。 无论如何,我从 txt 文件中获取 arrays 的部分就是我卡住的地方。 “getValidTxt”方法将首先检查文件“glosor.txt”是否在目录中,如果是则返回文件“glosor.txt”的路径,只需添加目录和“glosor.txt”即可”。 但是,如果没有,它将检查是否有任何其他以“.txt”结尾的文件,如果有,它会将它们添加到列表中并返回第一项以及目录。 如果没有,它将添加“glosor.txt”,并关闭程序,以便用户可以将单词输入到txt中。
“getChoiceSeed”和“followSeed”只是为了随机化单词的顺序。
假设您的可执行文件是标准应用程序(例如控制台应用程序)或类似应用程序,您可以通过几种不同的方式获取当前可执行文件的路径:
System.Reflection.Assembly.GetEntryAssembly().Location
请注意,如果执行进程不是正常的独立可执行文件,这可能是不正确的。
Assembly.GetExecutingAssembly().Location
这提供了当前正在执行的程序集的路径。 如果您的应用程序已通过 GAC 或其他方式与您的应用程序的 rest 分开,则可能是不正确的。
System.Environment.ProcessPath
请注意,如果执行进程不是正常的独立可执行文件,这可能是不正确的。
System.Environment.GetCommandLineArgs()[0]
但请注意,这可能有也可能没有路径信息。
另请参阅我的答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.