我对C#比较陌生,所以我的WinForms项目中包含一个包含自定义字体的文件夹。该字体在启动应用程序时非常正常,但在Visual Studio本身的实际设计器中,无法加载自定义控件(因为我在设计器中使用的路径不同)。这是我用来从资源文件夹中找到字体的代码:
string leadDirectory = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "Resources" + Path.DirectorySeparatorChar + "Roboto-Regular.ttf");
设计器中使用的目录是“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Resources \ Roboto-Regular.ttf”,显然它会抛出一个文件而不是在方法中发现异常。
任何帮助将不胜感激!
答案 0 :(得分:1)
您没有打开您认为正在打开的目录。检查调试模式private class GetVersionCode extends AsyncTask<Void, String, String> {
@Override
protected String doInBackground(Void... voids) {
String newVersion = null;
try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName() + "&hl=en")
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get()
.select("div[itemprop=softwareVersion]")
.first()
.ownText();
return newVersion;
} catch (Exception e) {
return newVersion;
}
}
@Override
protected void onPostExecute(String onlineVersion) {
super.onPostExecute(onlineVersion);
if (onlineVersion != null && !onlineVersion.isEmpty()) {
if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
showAlertDialogForUpdate(currentVersion, onlineVersion);
}
}
Log.e("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
}
}
实际是。
要完全理解这里出了什么问题,您应该了解如何从命令提示符运行程序。您有命令提示符,在该提示符下,您会看到“当前路径”设置为某个目录。通常,这表示您希望在该特定目录中执行操作,但您可以通过提供启动的完整路径来启动系统中任何位置的程序。但是,这将不使您的命令提示符切换到该已启动的应用程序的路径。尽管运行位于其他位置的程序,您仍将保留在同一文件夹中。此文件夹是您正在使用的“启动路径”。您可以想象,它与您尝试查找System.Windows.Forms.Application.StartupPath
文件夹的位置完全无关。
尽管已经演变为图形用户界面,但程序启动的方式仍然与DOS中的方式相同,因此这种区别仍然存在。
在Windows窗体中,您可以使用Resources
获取exe文件的完整路径和文件名,因此如果您使用Application.ExecutablePath
,则可以获得所需的基本路径。如果您的程序不是WinForms应用程序,您可以使用Path.GetDirectoryName()
命名空间中的Assembly.GetExecutingAssembly().Location
。