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
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)
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
PS: In UWP wirst du auf einige Restriktionen stoßen.
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