"Dateiablage" auf Storage anstatt Datenbank
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von BlueLagoonX.
-
-
ErfinderDesRades schrieb:
.WaitForExit as Boolean?
Jupp, dann kommt ne Exception, dass der Aktion kein Prozess zugeordnet wäre..."Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Dann wiederhol ich mich
VaporiZed schrieb:
Bau erstmal in ner TestApp das ProcExited mit nem einfachen Prozess nach, ohne Azure.VB.NET-Quellcode
- Imports System.Diagnostics
- Friend Class FrmMain
- Private WithEvents _proc As Process
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- _proc = Process.Start(IO.Path.Combine(Application.StartupPath, "TestFile.txt"))
- _proc.EnableRaisingEvents = True
- End Sub
- Private Sub ProcessExited(sender As Object, e As EventArgs) Handles _proc.Exited
- MessageBox.Show("Prozess wurde beendet.")
- End Sub
- End Class
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
VaporiZed schrieb:
Bau erstmal in ner TestApp das ProcExited mit nem einfachen Prozess nach, ohne Azure.
Hab ich gemacht - ich hatte aber auch schon gesagt, dass der Azure-Kram da nix mit zu tun hat.
Gleiche .png-Datei (liegt lokal beim Projekt) - siehe Screenshot
Ich vermute, dass hier kein "Prozess" in dem Sinne dahinter erkannt wird - warum auch immer. Vielleicht gibt's noch eine Lösung - andernfalls
käme mir jetzt nur in den Sinn, dass ich alle Dateien die zur Laufzeit geöffnet werden in eine Liste gespeichert werden und beim Schließen des Programms dann alle löschen.
Finde ich aber nicht so elegant ehrlich gesagt."Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Naja, da startet ja auch kein vollwertiger Prozess, sondern erstmal nur die AppAuswahl. Solltest zum Testen schon was verwenden, wo sich dann auch ein Programm öffnet.Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
VaporiZed schrieb:
Solltest zum Testen schon was verwenden, wo sich dann auch ein Programm öffnet.
jo mit nem leeren Textdokument funzt das. Ich hab jetzt mal die "Windows-Foto-Anzeige" auf immer verwenden gesetzt. Es wird auch dann kein Prozess erkannt."Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Klingt verdächtig danach, als ob moderne/modernisierte Apps (ggf. UWP-Apps?) nicht als Process geführt oder gefunden werden.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()
-
-
Das hier geht - man muss aber den Prozessnamen kennen. Also erst manuell starten, dann mittels
Process.GetProcesses
schauen, wie das Ding heißt und dann später:
VB.NET-Quellcode
- Imports System.Diagnostics
- Friend Class FrmMain
- Private WithEvents _proc As Process
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Process.Start(New ProcessStartInfo("D:\Testbild1.png")) 'ruft die UWP-App (?) Windows Photos auf.
- _proc = Process.GetProcessesByName("Microsoft.Photos")(0)
- _proc.EnableRaisingEvents = True
- End Sub
- Private Sub ProcessExited(sender As Object, e As EventArgs) Handles _proc.Exited
- MessageBox.Show("Prozess wurde beendet.")
- End Sub
- End Class
Vielleicht klappt das ja auch so in Deinem Projekt.Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
Danke, werd' ich mal testen. Allerdings muss ich da wieder Extrawürste coden, denn mal sind's Foto-Dateien, mal PDF-Dateien und dann gibt's ja noch Excel- und Word-Dateien
die in meinem Programm hinterlegt sind. Manchmal sogar E-Mails...(.msg)"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Hi, ich nochmal.
Gibt's keine Möglichkeit, die "Datei" aus dem Stream direkt zu öffnen, ohne lokal zu speichern?
In Zeile 10 geht's ja los...
VB.NET-Quellcode
- Public Sub OpenFileFromAzureStorage(Filename As String, ShareDirectory As String)
- 'TODO: temporäre Datei nach Schließen wieder löschen
- Dim shareClient = New Files.Shares.ShareClient(App.AzureConnectionString, App.AzureShareName)
- Dim shareDirClient = shareClient.GetDirectoryClient(ShareDirectory)
- Dim shareFileClient = shareDirClient.GetFileClient(Filename)
- If shareFileClient.Exists Then
- Dim shareFileDownloadInfo As Files.Shares.Models.ShareFileDownloadInfo = shareFileClient.Download
- _fi = New FileInfo($"{App.AzureLocalTempFolder}\{Filename}")
- If File.Exists(_fi.FullName) Then File.Delete(_fi.FullName)
- Using stream = File.OpenWrite(_fi.FullName)
- shareFileDownloadInfo.Content.CopyTo(stream)
- End Using
- Using _proc = New Process
- Try
- Dim procStartInfo As New ProcessStartInfo
- With procStartInfo
- .ErrorDialog = True
- .UseShellExecute = True
- .FileName = _fi.FullName
- End With
- _proc.StartInfo = procStartInfo
- _proc.EnableRaisingEvents = True
- AddHandler _proc.Exited, AddressOf ProcessExited
- _proc.Start()
- Catch ex As Exception
- msgError(ex.Message)
- End Try
- End Using
- Else
- msgError($"Die angeforderte Datei {ShareDirectory}\{Filename} konnte auf dem Server nicht gefunden werden!")
- Return
- End If
- End Sub
"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Was meinst Du mit Öffnen ohne Speichern? Inhalt in einer TextBox anzeigen? Wenn man eine Internetseite anwählt, wird doch dessen Inhalt auch heruntergeladen und lokal gespeichert, wenn ich mich recht entsinne.Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
Jo dachte ich mir schon. Ok, dann müssen die Files eben in nen lokalen Temp-Ordner und das Programm muss dann versuchen beim Beenden diesen Ordner komplett zu leeren.
Weil o.g. Konstrukt bekomm ich aufgrund der vielen Dateitypen nicht vollständig lauffähig. Also würde ich so vorgehen:
-Programm wird geöffnet -> neue List(Of String) oder wegen mir List(Of FileInfo)
-User öffnet was vom Storage -> wird lokal in einen Ordner geladen -> FileInfo oder Fullpath in die List gepackt
-Programm wird beendet -> Die Dateien aus der Liste werden aus dem lokalen Ordner gelöscht
Wär das so sinnvoll? Wenn das Programm abraucht, dann gibt's eben ein paar Dateien in dem Ordner die nicht gelöscht wurden, seh ich jetz nicht
als Weltuntergang"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!" -
Meine Programme arbeiten zum Teil auch mit Dateien.
Hierzu habe ich Routinen, die beim Beenden und, sofern nötig, beim Starten den Temp Ordner leeren.
Eine kannst du durchlaufen um enthaltene Dateien zu löschen, hilft aber nach dem Neustart des Programms nicht mehr da sie dann leer ist.
Hier mal ein Beispiel, wie meine Tmp-Routine aussieht.
VB.NET-Quellcode
-
- Option Explicit On
- Option Strict On
- Public Module mod_Test
- Public Sub ClearTmp()
- Dim Tmp As New Tmp() 'Beispiel 1
- Tmp.Dispose()
- Dim TmpRoot As New IO.DirectoryInfo("C:\tmp") 'Beispiel 2
- Dim Tmp1 As New Tmp(TmpRoot)
- Tmp1.Dispose()
- Dim TmpRootStr As String = "C:\tmp" 'Beispiel 3
- Dim Tmp2 As New Tmp(TmpRootStr)
- Tmp2.Dispose()
- End Sub
- End Module
- Public Class Tmp : Implements IDisposable
- Private disposedValue As Boolean
- ''' <summary>
- ''' Standard Root-Verzeichnis.
- ''' </summary>
- ''' <returns></returns>
- Public ReadOnly Property DefaultRootDirectory As IO.DirectoryInfo
- Get
- Return New IO.DirectoryInfo(IO.Path.Combine(IO.Path.GetTempPath, Application.ProductName))
- End Get
- End Property
- Private Property FieldRootDirectory As IO.DirectoryInfo = Nothing
- Public ReadOnly Property RootDirectory As IO.DirectoryInfo
- Get
- With Me
- Return New IO.DirectoryInfo(If(.FieldRootDirectory Is Nothing, .DefaultRootDirectory, .FieldRootDirectory).FullName)
- End With
- End Get
- End Property
- Public ReadOnly Property Downloads As IO.DirectoryInfo
- Get
- With Me
- If .RootDirectory Is Nothing Then Return Nothing
- Return New IO.DirectoryInfo(IO.Path.Combine(.RootDirectory.FullName, "Download"))
- End With
- End Get
- End Property
- Public ReadOnly Property Logs As IO.DirectoryInfo
- Get
- With Me
- If .RootDirectory Is Nothing Then Return Nothing
- Return New IO.DirectoryInfo(IO.Path.Combine(.RootDirectory.FullName, "Log"))
- End With
- End Get
- End Property
- ''' <summary>
- ''' Erstellt das Tmp-Objekt mit Standard <see cref="RootDirectory"/>.
- ''' </summary>
- Sub New()
- End Sub
- ''' <summary>
- ''' Erstellt das Tmp-Objekt mit dem unter <paramref name="Root"/> angegebenen <see cref="IO.DirectoryInfo"/>. Wenn dies <c>Nothing</c> ist oder nicht existiert, wird <see cref="RootDirectory"/> verwendet.
- ''' </summary>
- ''' <param name="Root"></param>
- Sub New(Root As IO.DirectoryInfo)
- With Me
- .FieldRootDirectory = Root
- End With
- End Sub
- ''' <summary>
- ''' Erstellt das Tmp-Objekt mit dem unter <paramref name="Root"/> angegebenen <see cref="String"/>. Wenn dies <c>Nothing</c> ist oder nicht existiert, wird <see cref="RootDirectory"/> verwendet.
- ''' </summary>
- ''' <param name="Root"></param>
- Sub New(Root As String)
- With Me
- .FieldRootDirectory = If(String.IsNullOrEmpty(Root), Nothing, New IO.DirectoryInfo(Root))
- End With
- End Sub
- ''' <summary>
- ''' Löscht alle Dateien.
- ''' </summary>
- ''' <param name="disposing"></param>
- Protected Overridable Sub Dispose(disposing As Boolean)
- If Not disposedValue Then
- If disposing Then
- ' TODO: Verwalteten Zustand (verwaltete Objekte) bereinigen
- End If
- With Me
- Try
- If .Downloads IsNot Nothing AndAlso .Downloads.Exists Then .Downloads.Delete(True)
- If .Logs IsNot Nothing AndAlso .Logs.Exists Then .Logs.Delete(True)
- Catch ex As Exception
- MessageBox.Show(ex.Message, "Deleting Files", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Try
- End With
- disposedValue = True
- End If
- End Sub
- ' ' TODO: Finalizer nur überschreiben, wenn "Dispose(disposing As Boolean)" Code für die Freigabe nicht verwalteter Ressourcen enthält
- ' Protected Overrides Sub Finalize()
- ' ' Ändern Sie diesen Code nicht. Fügen Sie Bereinigungscode in der Methode "Dispose(disposing As Boolean)" ein.
- ' Dispose(disposing:=False)
- ' MyBase.Finalize()
- ' End Sub
- Public Sub Dispose() Implements IDisposable.Dispose
- ' Ändern Sie diesen Code nicht. Fügen Sie Bereinigungscode in der Methode "Dispose(disposing As Boolean)" ein.
- Dispose(disposing:=True)
- GC.SuppressFinalize(Me)
- End Sub
- End Class
-
Benutzer online 1
1 Besucher
-
Ähnliche Themen
-
WebStorage-Objekte, Benutzerdaten auslesen
VBNEWBIE1987 - - Sonstige Problemstellungen -
Pidgin - - Sonstige Problemstellungen
-
7 Benutzer haben hier geschrieben
- tragl (17)
- VaporiZed (7)
- ISliceUrPanties (4)
- ErfinderDesRades (3)
- INOPIAE (1)
- Fakiz (1)
- BlueLagoonX (1)