Laden...

UWP gute Beispiele finden für VS2017

Erstellt von af0815 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.458 Views
af0815 Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren
UWP gute Beispiele finden für VS2017

Ich darf mich in die Materie UW Apps einarbeiten. Nachdem ich bisher nur in WinForms unterwegs war.

Was mir ein wenig fehlt bei den UW, sind Beispiele die speziell für dieses Thema und für den Umsteiger sinnvoll sind. Ich habe mir natürlich die Beispiele auf GitHub von MS zu UW angesehen. Dort sind aber typische WinForm Lösungen nicht behandelt bzw. ausgespart.

Ein aktuelles Beispiel, warum ich die Frage stelle:

Was mit der System.IO.xxx problemlos als funktioniert wird zur Herausforderung
Beispiel:

            if (System.IO.Directory.Exists(sourcePath))
            {
                string[] files = System.IO.Directory.GetFiles(sourcePath);
                foreach (string s in files)
                {
                    fileName = System.IO.Path.GetFileName(s);
                    destFile = System.IO.Path.Combine(targetPath, fileName);
                    System.IO.File.Copy(s, destFile, true);
                    System.IO.File.Delete(s);
                }
            }
            else
            {
                Debug.WriteLine("Source path does not exist!");
}

Das wird über einen Dispatchtimer aufgerufen, der das über einen Task aufruft. Nur gibt es entweder Probleme das das ganze nicht im UI ausgeführt werden kann, Oder das ganz einfach einfach Teile des Pfades nicht gefunden werden, wenn diese auf andere vorhandene Lokationen auf der Platte oder Windows UNC-Share sind ("Could not find a part of the path..."). Wenn ich die Lokation unterhalb von zB. Pictureordner lege, so läuft der Code ohne Probleme.
Dazu habe ich aber nicht die richtigen Keywords gefunden, wie man bei Google Information findet.

Habt ihr vielleicht Links zu Beispielen, die einem Umsteiger helfen ?

Andreas

3.003 Beiträge seit 2006
vor 6 Jahren

Du hast Recht, der Umstieg ist alles andere als einfach. Am Anfang taumelt man von Stolperfalle zu Stolperfalle, bis man an den Punkt kommt, wo man "f*** it, ich mache einfach weiter Windows Forms" sagen möchte. Für mich war das die Stelle, an der ich mir ein Buch (eigentlich mehrere) gekauft hab und ein paar Wochenenden mit Schmökern verbracht habe. Definitiv kein verschwendetes Geld, wenn ich bedenke, wieviele graue Haare mir das erspart hat.

https://www.amazon.de/Developing-Windows-10-Applications-C/dp/1522894918

Würde ich als komplettestes Buch zum Thema ansehen.

Viel Erfolg,

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

16.842 Beiträge seit 2008
vor 6 Jahren

Wollt ihr wirklich UWP direkt entwickeln und nicht via Xamarin?

PS: ja, Apps (und mittlerweile auch Webanwendungen) sollten vollständig asynchron umgesetzt werden.
Daher gibt es auch andere Namespaces und andere Implementiernungen.
Es ist schließlich eine andere Plattform mit anderen Anforderungen.

M
177 Beiträge seit 2009
vor 6 Jahren

Hey,

in UWP kannst du nicht mehr so einfach mit System.IO auf Files zugreifen. Du arbeitest außerdem dann mit der StoreageFolder oder StoreageFile Klasse. Die Apps laufen alle in einer Art Sandbox. Du hast nur noch Zugriff auf bestimmte Capabilities (Resourcen) die der Benutzer dir freischalten muss.

Du kannst zwar die Capabilitie z.B. den Download Ordner, Music Ordner usw. requesten, das garantiert aber noch keinen Zugriff.

Wenn du die Capabilitie auf den Download Folder hast, hast du Lese und Schreibrechte. Möchtest du außerhalb davon eine File schreiben/lesen muss der Benutzer explizit die File mit dem OpenFileDialog oder OpenFolderDialog auswählen.

Um zukünftig nicht mehr nach den lese/schreibrechten fragenz u müssen, kannst du die FutureAccessList verwenden.

Ansonsten hast du nur Lese- und Schreibrechte in deinem Package Folder. Siehe auch hier https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions

Projekt: FileRenamer

PS: In UWP wirst du auf einige Restriktionen stoßen.

af0815 Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren

Danke für die Antworten, das Buch bei Amazon werde ich mir genauer ansehen.

Das hier ist für mich der Anknüpfpunkt:

Die Apps laufen alle in einer Art Sandbox. Du hast nur noch Zugriff auf bestimmte Capabilities (Resourcen) die der Benutzer dir freischalten muss. MS verwendet in seinen Beispielen (aus guten Grund) nur Ordner/Daten/Resourcen die problemlos verwendet werden.

Der Bereich Server besonders Share, Dateien im Unternehmensbereich etc. wird NUR über Benutzereingriff dargestellt. Lösungen für automatisierte Vorgänge wie im Industriebereich werden derzeit nicht diskutiert.

Das Beispiel vom System.IO habe ich mal auf StorageFolder und StorageFile umgestellt, das Thema bleibt das gleiche, die myList ist bei mir leer, wenn die Daten von einer anderen App kommen.

   private async void ButtonFile_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"C:\Users\Public\Pictures;
            string EndDirectory = @"C:\Users\Public\Pictures\SubDir";

            Debug.WriteLine("ButtonFile_Click " + StartDirectory + "\n");
            Debug.WriteLine("ButtonFile_Click " + EndDirectory + "\n");
            StorageFolder myStartFolder = await StorageFolder.GetFolderFromPathAsync(StartDirectory);
            StorageFolder myEndFolder = await StorageFolder.GetFolderFromPathAsync(EndDirectory);
            StorageFileQueryResult myRes = myStartFolder.CreateFileQuery();
            IReadOnlyList<StorageFile> myList = await myRes.GetFilesAsync();
            foreach (StorageFile datei in myList)
            {
                Debug.WriteLine("CopyFile " + datei.Name + "\n");
                await datei.MoveAsync(myEndFolder);
            }
        }

Warum ich mich damit überhaupt beschäftige: Die neuen USB Kameras liefern zwar 8 MPx Bilder, die aber nur unter Win 10 mit dem Windows.Media.Capture.MediaCapture Objekt. Alle anderen Objekte besonders unter WinForms und WPF liefern maximal 2 MPx Bilder. Die Bilder erzeugen und lokal im Picturfolder ablegen ist nicht das Problem. NUR müssen die Bilder auf ein Windows-Share im Unternehmen verschoben werden (kein Webserver, kein FTP) und deswegen ist die Frage aufgetaucht.

Die Orte sind alle bekannt, die Rechte des Users auch, die App läuft nicht als Dienst. Vielleicht gibt es die Möglichkeit im Manifest, weitere Einstellungen zu den Rechten zu treffen, nur habe ich die noch nicht gefunden.

Hier ist ein Hinweis von https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions

Universal Naming Convention (UNC) folders A combination of the following capabilities is needed.

The home and work networks capability:

  • PrivateNetworkClientServer
    ...
    And, if applicable, the domain credentials capability:
  • EnterpriseAuthentication

Note: You must add File Type Associations to your app manifest that declare specific file types that your app can access in this location.

Nur habe ich damit noch nichts anfangen können. Und wenn ich den UNC-Folder angegeben habe, so war das Ergebnis auch leer. Irgendwie gibt es da ja eine Kombination, was das gehen sollte, so wie ich das obige Zitat verstehe.

Habt ihr da noch einen Tip, wie ich das mit Bildern (*.jpg) im Manifest eintragen kann ?

Andreas