Как извлечь часть строки из результата SQL-запроса, используя C # - PullRequest
0 голосов
/ 10 октября 2019

У меня следующая проблема: у меня есть таблица sql («pathtable»), в которой я сохраняю пути к моим заархивированным XML-файлам в столбце с именем «path». Теперь я хочу извлечь имя файла ("filename") из указанного файла ("xml1.xml") по пути из столбца, который я получаю, когда использую запрос, который упоминаю в своем коде (SELECT path FROM pathtable).

другими словами, допустим, в папке xmlfiles (xmlfiles) есть файл с именем «xml1.xml». и путь (C: \ Users \ xmlfiles) к указанной папке сохраняется в моей таблице sql в столбце «путь».

В идеальном мире результатом моего кода будет просто имя файла: "xml1" (без расширения файла)

Спасибо за вашу помощь, Брайан

SqlConnection connection = new SqlConnection(@"Data Source=...\SQLEXPRESS;Initial Catalog=...;Integrated Security=SSPI");
{
    string pathname= "SELECT path FROM pathtable";
    SqlCommand cmd = new SqlCommand(pathname, connection);
    connection.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    string strPath = pathname; //"C:\Users\xmlfiles\"; 
    string filename = null;
    filename = Path.GetFileName(strPath);

    while (reader.Read())
    {
        Console.Write(filename);
    }

   Console.ReadKey();
    reader.Close();
    connection.Close();
}

, потому что, кажется, есть много путаницы в том, чего я хочу достичь (мой плохой:)), я пытаюсь объяснить это лучше: это моя таблица sql: Таблица SQL

и по этому пути: "C: \ Users \ xmlfiles \" естьфайл с именем «testxml.xml», и я хочу, чтобы мой код возвращал «testxml». и еще одно требование - это жестко запрограммированный , другими словами, я могу изменить только путь, который хочу использовать в моей таблице sql, а не в коде C #. скажем, я обновляю свою таблицу sql с "C: \ Users \ xmlfiles \" до "C: \ Users \ docfiles \", тогда она должна дать мне имя файла из папки docfiles.

я простоначинаем, так что спасибо за ваше терпение

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Не уверен, что вы боретесь с анализом имени файла по пути или чтением из БД, поэтому я рассмотрел оба.

С каждой итерацией цикла while вы фактически читаете одну строку из набора результатов. Затем вы можете прочитать значение каждого столбца для этой строки по индексу и ввести следующий текст:

while (reader.Read())
{
    string fileName = reader.GetString(0);
}

Если вам нужно было выбрать два столбца из таблицы, вы можете сделать что-то вроде этого:

SELECT path,FILENAME FROM pathtable

while (reader.Read())
{
        string fileName = reader.GetString(0);
        string filePAth = reader.GetString(1);
}

Если бы вы хранили весь путь в таблице, вы могли бы разобрать имя файла, используя

System.IO.Path.GetFileName(fullPath) или для имени файла без расширения System.IO.Path.GetFileNameWithoutExtension(fullPath)

Хотя я бы посоветовалВы выполняете описанную выше обработку при первоначальном создании записи, чтобы избавить вас от необходимости выполнять дальнейшую обработку в дальнейшем, сохраняя как путь, так и имя файла. Таким образом, вы можете выбрать имя файла, если это все, что вам нужно.

2 голосов
/ 10 октября 2019

Если вам нужно имя файла без расширения, вы можете просто использовать метод GetFileNameWithoutExtension:

string strPath = @"C:\Users\xmlfiles\xmlFile.xml"; 
string filename = Path.GetFileNameWithoutExtension(strPath);
Console.WriteLine(filename); // result will be xmlFile
...