Вот более простой ответ на ответ Майка Кингхана. Это обнаружит унаследованные методы. Он также проверит наличие точной подписи (в отличие от подхода jrok, который позволяет преобразовывать аргументы).
template
class HasGreetMethod
{
template
static std::true_type testSignature(void (T::*)(const char*) const);
template
static decltype(testSignature(&T::greet)) test(std::nullptr_t);
template
static std::false_type test(...);
public:
using type = decltype(test(nullptr));
static const bool value = type::value;
};
struct A { void greet(const char* name) const; };
struct Derived : A { };
static_assert(HasGreetMethod::value, "");
Использование:
System.IO.Path.GetDirectoryName(saveDialog.FileName)
(и соответствие System.IO.Path.GetFileName
). Класс Пути действительно довольно полезен.
Объект контуров в System.IO
синтаксические анализы это довольно приятно.
Вы могли создать объект FileInfo. Это имеет Имя, FullName и свойство DirectoryName.
var file = new FileInfo(saveFileDialog.FileName);
Console.WriteLine("File is: " + file.Name);
Console.WriteLine("Directory is: " + file.DirectoryName);
Так как наклонная черта вправо не позволяется в имени файла, один простой путь состоит в том, чтобы разделить SaveFileDialog. Имя файла с помощью Строки. LastIndexOf; например:
string filename = dialog.Filename;
string path = filename.Substring(0, filename.LastIndexOf("\"));
string file = filename.Substring(filename.LastIndexOf("\") + 1);