import java.util.Scanner;
public class Time{
public static void main(String[]args){
int totMins=0;
int hours=0;
int mins=0;
Scanner sc= new Scanner(System.in);
System.out.println("Enter the time in mins: ");
totMins= sc.nextInt();
hours=(int)(totMins/60);
mins =(int)(totMins%60);
System.out.printf("%d:%d",hours,mins);
}
}
Я определил следующее свойство, поскольку мы часто используем это в поблочном тестировании.
public static string AssemblyDirectory
{
get
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
}
}
Assembly.Location
свойство иногда дает Вам некоторые забавные результаты при использовании NUnit (где блоки, выполненные от временной папки), таким образом, я предпочитаю использовать CodeBase
, который дает Вам, путь в формате URI, тогда UriBuild.UnescapeDataString
удаляет File://
вначале, и GetDirectoryName
изменения это к нормальному формату окон.
string path = Path.GetDirectoryName(typeof(DaoTests).Module.FullyQualifiedName);
Текущий каталог, где Вы существуете.
Environment.CurrentDirectory; // This is the current directory of your application
при копировании .xml файла со сборкой необходимо найти его.
или
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(SomeObject));
// The location of the Assembly
assembly.Location;
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var assemblyPath = assembly.GetFiles()[0].Name;
var assemblyDir = System.IO.Path.GetDirectoryName(assemblyPath);
AppDomain.CurrentDomain.BaseDirectory
работает с интерфейсом MbUnit.
Я подозреваю, что реальная проблема здесь - то, что Ваш исполнитель тестов копирует Ваш блок в различное местоположение. Нет никакого пути во времени выполнения для сообщения, где блок был скопирован с, но можно, вероятно, зеркально отразить переключатель, чтобы сказать исполнителю тестов выполнять блок от того, где это а не скопировать его в теневой каталог.
Такой переключатель, вероятно, будет отличаться для каждого исполнителя тестов, конечно.
Вы рассмотрели встраивание Ваших данных XML как ресурсы в Вашей опытной сборке?
Что относительно этого:
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Это должно работать, если блок не , тень скопировала :
string path = System.Reflection.Assembly.GetExecutingAssembly().Location
Это помогает?
//get the full location of the assembly with DaoTests in it
string fullPath = System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location;
//get the folder that's in
string theDirectory = Path.GetDirectoryName( fullPath );
Я использовал блок. CodeBase вместо Местоположения:
Assembly a;
a = Assembly.GetAssembly(typeof(DaoTests));
string s = a.CodeBase.ToUpper(); // file:///c:/path/name.dll
Assert.AreEqual(true, s.StartsWith("FILE://"), "CodeBase is " + s);
s = s.Substring(7, s.LastIndexOf('/') - 7); // 7 = "file://"
while (s.StartsWith("/")) {
s = s.Substring(1, s.Length - 1);
}
s = s.Replace("/", "\\");
Это работало, но я больше не уверен, что это на 100% корректно. Страница в http://blogs.msdn.com/suzcook/archive/2003/06/26/assembly-codebase-vs-assembly-location.aspx говорит:
"CodeBase является URL к месту, где файл был найден, в то время как Местоположение является путем, где это было на самом деле загружено. Например, если блок был загружен с Интернета, его CodeBase может запуститься с "http://", но его Местоположение может запуститься с "C:\". Если бы файл был скопирован с тени, Местоположение было бы путем к копии файла в dir теневой копии It’s, также хороший, чтобы знать, что CodeBase, как гарантируют, не будет установлен для блоков в GAC. Местоположение будет всегда устанавливаться для блоков, загруженных из диска, как бы то ни было. "
Вы можете хотеть использовать CodeBase вместо Местоположения.
Я полагаю, что это работало бы на любой вид приложения:
AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory
Here is a VB.NET port of John Sibly's code. Visual Basic is not case sensitive, so a couple of his variable names were colliding with type names.
Public Shared ReadOnly Property AssemblyDirectory() As String
Get
Dim codeBase As String = Assembly.GetExecutingAssembly().CodeBase
Dim uriBuilder As New UriBuilder(codeBase)
Dim assemblyPath As String = Uri.UnescapeDataString(uriBuilder.Path)
Return Path.GetDirectoryName(assemblyPath)
End Get
End Property
То же, что и ответ Джона, но чуть менее подробный метод расширения.
public static string GetDirectoryPath(this Assembly assembly)
{
string filePath = new Uri(assembly.CodeBase).LocalPath;
return Path.GetDirectoryName(filePath);
}
Теперь вы можете сделать:
var localDir = Assembly.GetExecutingAssembly().GetDirectoryPath();
или, если хотите:
var localDir = typeof(DaoTests).Assembly.GetDirectoryPath();
Это так просто:
var dir = AppDomain.CurrentDomain.BaseDirectory;