Судя по вашему скриншоту и выводу, в начале пути к файлу есть невидимый символ. Это приведет к тому, что .NET не сможет распознать, что это абсолютный путь, и автоматически это сделает его самим абсолютным путем.
Если вы используете этот код, вы заметите, что вставленный ?
вызывает проблему здесь:
System.IO.FileInfo fi = new System.IO.FileInfo(@"?D:\some_file.ext");
, который выводит: C:\Users\...\ConsoleApp8\bin\Debug\netcoreapp2.2\?D:\some_file.ext
.
Вместо:
System.IO.FileInfo fi = new System.IO.FileInfo(@"D:\some_file.ext");
Который выводит: D:\some_file.ext
.
Если вы поместите свой код в HEX-редактор, вы увидите, что перед D:
действительно есть символ.
Взломы Битового жонглирования имеют много прохладных приемов.
Хотя часть его датирована теперь, мне внушили страх некоторые приемы в "Дзэн Оптимизации кода" Michael Abrash. Реализация Игры Жизни является ошеломляющей.
Существует книга, которая собирает многие из тех 'волшебных приемов', и это может быть интересно для Вас: Восхищение Хакера.
У Вас есть, например, много приемов как взломы битового жонглирования и т.д.... (у Вас есть несколько алгоритмов квадратного корня, например, что Вы видите на книжной версии Google),
Не точно математический взлом, но мне нравится этот о Римских цифрах в Java6:
public class Example {
public static void main(String[] args) {
System.out.println(
MCMLXXVII + XXIV
);
}
}
даст Вам ожидаемый результат (1977 + 24 = 2001), из-за переписать правила:
class Transform extends TreeTranslator
, внутренний класс компилятора Java.
Transform
посещения все операторы в исходном коде и замены каждая переменная, имя которой соответствует Римской цифре международному литералу того же числового значения.
public class Transform extends TreeTranslator {
@Override
public void visitIdent(JCIdent tree) {
String name = tree.getName().toString();
if (isRoman(name)) {
result = make.Literal(numberize(name));
result.pos = tree.pos;
} else {
super.visitIdent(tree);
}
}
}
Я - большой поклонник Строки Bresenham, но укомплектовываю вращающее устройство CORDIC, включенное все виды пиксельных придирок для меня, когда центральные процессоры были медленнее.
Я всегда впечатлялся из двух классических 'волшебных' алгоритмов, которые имеют отношение к датам:
Некоторый (непротестированный) код следует:
import math
def dayOfWeek(dayOfMonth, month, year):
yearOfCentury = year%100
century = year // 100
h = int(dayOfMonth + math.floor(26.0*(month + 1)/10) + yearOfCentury \
+ math.floor(float(yearOfCentury)/4) + math.floor(float(century)/4) \
+ 5*century) % 7
return ['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'][h]
def easter(year):
a = year%19
b = year%4
c = year%7
k = int(math.floor(float(year)/100))
p = int(math.floor((13 + 8.0*k)/25))
q = int(math.floor(float(k)/4))
M = (15 - p + k - q)%30
N = (4 + k - q)%7
d = (19*a + M)%30
e = (2*b + 4*c + 6*d + N)%7
day1 = 22 + d + e
if day1 <= 31: return "March %d"%day1
day2 = d + e - 9
if day2 == 26: return "April 19"
if day2 == 25 and (11*M + 11)%30 < 19: return "April 18"
return "April %d"%day2
print dayOfWeek(2, 12, 2008) # 'Tuesday'
print easter(2008) # 'March 23'