получить ссылки из внешнего файла - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над графическим интерфейсом, который в основном используется для загрузки инструментов из Интернета.
Приложение спроектировано для .Net Framework 3.5 (для совместимости) и до сих пор прекрасно работает, но, на мой взгляд,Следующая проблема: каждый раз, когда одно из этих приложений изменяет ссылку, я должен изменить ее и в своем проекте, чтобы она могла отражать последнюю версию / ссылку.

Можно ли будет прочитать ссылки из локального текстового файла илиеще лучше - pastbin / googledoc, чтобы я мог изменять ссылки извне?

Хотелось бы, чтобы это было так же просто, как поместить string ccleaner = "www.ccleaner.link и т. д. в текстовый файл и прочитать его с помощью File.ReadAllText ... App.xaml.cs:

namespace myapp
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public void Application_Startup(object sender, StartupEventArgs e)
        {
            var wc = new WebClient();
            var csv = wc.DownloadString("https://docs.google.com/spreadsheets/d/1IjQfWMIQyw8NuncRd91iWJD_GdWTCqrrX11pTBv1bEA/edit?usp=sharing");
            var links = csv
                .Split('\n') // Extract lines
                .Skip(1) // Skip headers line
                .Select(line => line.Split(',')) // Separate application name from download URL
                .ToDictionary(tokens => tokens[0], tokens => tokens[1]);
            var CCleanerLink = links["CCleaner"];
        }
    }
}

tools.xaml.cs (это страница в главном окне)

namespace myapp
{
    /// <summary>
    /// Interaction logic for tools.xaml
    /// </summary>
    public partial class tools : Page
    {
        public tools()
        {
            InitializeComponent();

        }


        public void downloadFile(String address, String filename)
        {
            WebClient down = new WebClient();
            down.Headers.Add(HttpRequestHeader.UserAgent,"Mozilla/5.0 (compatible; http://example.org/)");
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
            down.DownloadFileAsync(new Uri(address), filename);
        }

        private void Autor_Checked(object sender, RoutedEventArgs e)
        {
            downloadFile("https://live.sysinternals.com/autoruns.exe", "autoruns.exe");

        }

        private void Ccleaner_Checked(object sender, RoutedEventArgs e)
        {
            downloadFile(CCleanerLink, "ccleaner.exe");
        }

    }

}

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете хранить свои последние ссылки в CSV-файле, хранящемся на вашем сервере, формат которого будет похож на:

Application,URL
CCleaner,https://www.ccleaner.com/fr-fr/ccleaner/download
...,...
...,...
...,...

И в вашем приложении получить его:

var wc = new WebClient ();

var csv = wc.DownloadString("https://docs.google.com/spreadsheets/d/1IjQfWMIQyw8NuncRd91iWJD_GdWTCqrrX11pTBv1bEA/gviz/tq?tqx=out:csv&sheet=Sheet1");
var links = csv
    .Split('\n') // Extract lines
    .Skip(1) // Skip headers line
    .Where(line => line != "") // Remove empty lines
    .Select(line => line.Split(',')) // Separate application name from download URL
    .ToDictionary(tokens => tokens[0].Trim('"'), tokens => tokens[1].Trim('"'));
var CCleanerLink = links["CCleaner"];

Для чистого управления URI в вашем приложении вы можете использовать шаблон репозитория :

public static class ApplicationsRepository
{
    private static IDictionary<string, string> URIs = null;

    public static IDictionary<string, string> GetAllURIs()
    {
        if (URIs == null)
        {
            var wc = new WebClient();
            var csv = wc.DownloadString("http://myhosting.com/application/tools-downloader/config/links.csv");
            URIs = csv
                .Split('\n')
                .Skip(1)
                .Select(line => line.Split(','))
                .ToDictionary(tokens => tokens[0], tokens => tokens[1]);
        }

        return URIs;
    }

    public static string GetURI(string applicationName)
    {
        var allURIs = GetAllURIs();

        string applicationURI = null;
        allURIs.TryGetValue(applicationName, out applicationURI);

        return applicationURI;
    }
}

Затем вваш обработчик событий:

private void Ccleaner_Checked(object sender, RoutedEventArgs e)
{
    downloadFile(ApplicationsRepository.GetURI("CCleaner"), "ccleaner.exe");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...