当前,我在项目中获得了文件夹的完整路径。从长远来看,这是不可持续的。我需要这样的东西
var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
但我不想访问bin/Debug
文件夹,而是要访问bin/tessdata
文件夹(tessdata
是自定义文件夹)。
我看了其他一些帖子,但所有帖子都放在bin/Debug
文件夹中。
这就是它从一开始就应该工作的方式
var ocr = new TesseractEngine("./tessdata", "eng", Tesseract.EngineMode.TesseractAndCube);
,但我无法通过./tessdata
访问该文件夹。
有人解决这两个问题吗?谢谢!
修改
对不起,我误会了这种情况。我实际上是在尝试到达另一层tessdata
文件夹内的bin/debug
文件夹。该代码正在该项目中运行,但我不知道路径已转到正在运行的项目(winform或webAPi项目)。基本上是Project\LicensePlate.Core\bin\Debug\tessdata
。
给您带来的不便,我们深表歉意,但仍然希望能获得一些帮助!
答案 0 :(得分:1)
如果文件夹始终为bin / tessdata,请使用:
var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "/../tessdata";
否则,在编译过程中执行任务并将bin/tessdata
复制到bin/debug/tessdata
。
答案 1 :(得分:0)
var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
idea可以很好地获取应用程序的运行位置(因此原因是从visual studio启动时在bin / Debug中),并且即使在部署时也可以正常工作。
如果将./tesseractdata
文件夹放在可执行文件的旁边,这就是方法。调试时可能会发现一些不一致之处,这可能是由于解决方案中的文件与源文件位于“ tesseractdata
”文件夹中位于同一级别。如果是这样,可以在VS的文件属性中使用“复制到输出目录”标志。
答案 2 :(得分:0)
您可以编写如下函数来获取正在执行的程序集并搜索所有文件/文件夹。 (在这里我提到从bin
的文件夹中搜索文件
目录。
public static string GetExternalToolsExecutablePath(string externalAssemblyName)
{
try
{
var assemblyLocation = Assembly.GetEntryAssembly().Location;
var directories = Path.GetDirectoryName(assemblyLocation);
if (directories != null && Directory.Exists(directories))
{
var dirInfo = new DirectoryInfo(directories);
var executable = dirInfo.GetFiles(externalAssemblyName, SearchOption.AllDirectories)
.Select(a => a.FullName).FirstOrDefault();
return !string.IsNullOrEmpty(executable) ? executable : null;
}
return null;
}
catch (Exception e)
{
return null;
}
}
确保已在每个版本上复制了必需的文件,因此请使用构建脚本在每个版本上进行复制。
echo "Copy BIN FOLDER files..."
xcopy %ProjectDir%"XXXXXXXX\*.*" %TargetDir%"\XXXXXXX\" /Y /I /E /R>nul
根据您的情况,您可以根据文件类型对功能进行一些更改。
答案 3 :(得分:0)
这里使用了GetDirectoryName()函数,它以汇编位置(目录+应用程序Dll的位置路径)返回,返回类型为字符串。
出于您的目的,请在代码中使用以下更改。
var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\tessdata";
它返回您的例外路径位置。但是My Advise使用环境变量,否则您将在其他环境中遇到一些问题。这是环境变量的引用。
https://docs.microsoft.com/en-us/dotnet/api/system.environment?view=netframework-4.8