From a041ffe3d6d90ea4c7e5d480ab8a16fd16d33626 Mon Sep 17 00:00:00 2001 From: Nicola Pievani Date: Wed, 25 Sep 2019 13:13:00 +0000 Subject: [PATCH] =?UTF-8?q?EgtDOORCreator=202.1i1=20:=20-=20modifica=20del?= =?UTF-8?q?la=20funzione=20LockDir;=20-=20tolta=20la=20ricerca=20del=20pri?= =?UTF-8?q?mo=20file=20disponibile=20nel=20progetto=20in=20modalit=C3=A0?= =?UTF-8?q?=20porta=20singola.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AssemblyManager/AssemblyManagerV.xaml | 4 +- AssemblyManager/AssemblyManagerVM.vb | 1 + ProjectManager/ProjectManagerVM.vb | 29 ++++++------ Utility.vb | 63 +++++++++++++++++---------- 4 files changed, 56 insertions(+), 41 deletions(-) diff --git a/AssemblyManager/AssemblyManagerV.xaml b/AssemblyManager/AssemblyManagerV.xaml index 9d02a30..c8a6254 100644 --- a/AssemblyManager/AssemblyManagerV.xaml +++ b/AssemblyManager/AssemblyManagerV.xaml @@ -10,9 +10,9 @@ - + + Visibility="{Binding VisibilityDoorList}"> diff --git a/AssemblyManager/AssemblyManagerVM.vb b/AssemblyManager/AssemblyManagerVM.vb index cb95f14..ef60ba5 100644 --- a/AssemblyManager/AssemblyManagerVM.vb +++ b/AssemblyManager/AssemblyManagerVM.vb @@ -24,6 +24,7 @@ Public Class AssemblyManagerVM End Get Set(value As Visibility) m_VisibilityDoorList = value + NotifyPropertyChanged("VisibilityDoorList") End Set End Property diff --git a/ProjectManager/ProjectManagerVM.vb b/ProjectManager/ProjectManagerVM.vb index eaa9dbf..4077072 100644 --- a/ProjectManager/ProjectManagerVM.vb +++ b/ProjectManager/ProjectManagerVM.vb @@ -730,23 +730,22 @@ Public Class ProjectManagerVM Local_Assembly.IsModified = False CurrProject.AssemblyList.Add(Local_Assembly) Else - ' Aggiungo il primo nome all'elenco - Dim DDFFileArray() As String = Directory.GetFiles(CurrProject.Name) - Utility.OutLog("Cerco il primo file disponibile nel progetto : " & CurrProject.Name) - For DDFIndex = 0 To DDFFileArray.Count - 1 - ' verifico che il file sia un ddf e non sia in lettura - se il file che trovo è in lettura restituisce un messaggio !! da togliere !! - If Path.GetExtension(DDFFileArray(DDFIndex)).ToLower = ".ddf" And - Not Utility.VerifyFileLocked(Path.GetDirectoryName(DDFFileArray(DDFIndex)), Path.GetFileNameWithoutExtension(DDFFileArray(DDFIndex)), False) Then - OptionModule.m_sLastProject = DDFFileArray(DDFIndex) - Local_Assembly.Name = OptionModule.m_sLastProject - Local_Assembly.IsModified = False - CurrProject.AssemblyList.Add(Local_Assembly) - Exit For - End If - Next + '' Aggiungo il primo nome all'elenco + 'Dim DDFFileArray() As String = Directory.GetFiles(CurrProject.Name) + 'Utility.OutLog("Cerco il primo file disponibile nel progetto : " & CurrProject.Name) + 'For DDFIndex = 0 To DDFFileArray.Count - 1 + ' ' verifico che il file sia un ddf e non sia in lettura - se il file che trovo è in lettura restituisce un messaggio !! da togliere !! + ' If Path.GetExtension(DDFFileArray(DDFIndex)).ToLower = ".ddf" And + ' Not Utility.VerifyFileLocked(Path.GetDirectoryName(DDFFileArray(DDFIndex)), Path.GetFileNameWithoutExtension(DDFFileArray(DDFIndex)), False) Then + ' OptionModule.m_sLastProject = DDFFileArray(DDFIndex) + ' Local_Assembly.Name = OptionModule.m_sLastProject + ' Local_Assembly.IsModified = False + ' CurrProject.AssemblyList.Add(Local_Assembly) + ' Exit For + ' End If + 'Next End If Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Collapsed - Else '------------------------------------------------------------------------------------------------- ' se esiste un file in lettura con questo nome allora blocco tutto diff --git a/Utility.vb b/Utility.vb index 3e4391a..ae84031 100644 --- a/Utility.vb +++ b/Utility.vb @@ -10,6 +10,7 @@ Public Module Utility Dim m_CurrLockFile As String Dim m_bIsLock As Boolean = False Dim m_StopSaving As Boolean = False + Dim m_nIndexLockFile As Integer = -1 Public ReadOnly Property StopSaving As Boolean Get @@ -20,32 +21,53 @@ Public Module Utility #Region "Blocca file/progetto" ' CurrFile deve arrivare già senza estensione! - Private Function CrateFileLock(ByVal CurrDirectory As String, Optional ByVal CurrFile As String = "") As String - ' eseguo comunque un controllo sul nome del file che ricevo - If CurrFile.EndsWith(DDF_EXTENSION) Then - CurrFile.Replace(DDF_EXTENSION, "") + Private Function GenerateLockFileName(ByVal CurrDirectory As String, Optional ByVal CurrFile As String = "") As String + ' per bloccare il direttorio + If String.IsNullOrEmpty(CurrFile) Then + Return CurrDirectory & "\Lock_Project.lck" + + ' per blocccare il file + Else + If CurrFile.EndsWith(DDF_EXTENSION) Then + CurrFile.Replace(DDF_EXTENSION, "") + End If + Return CurrDirectory & "\Lock_" & CurrFile & ".lck" End If - Dim sLockFile As String = CurrDirectory & "\Lock_Project.txt" - If Not String.IsNullOrEmpty(CurrFile) Then - sLockFile = CurrDirectory & "\Lock_Project_" & CurrFile & ".txt" - End If - Return sLockFile + End Function Public Function VerifyFileLocked(ByVal CurrDirectory As String, Optional ByVal CurrFile As String = "", Optional ByVal bSendMsg As Boolean = True) As Boolean - Dim sLockFile As String = CrateFileLock(CurrDirectory, CurrFile) + Dim sLockFile As String = GenerateLockFileName(CurrDirectory, CurrFile) + Dim bIsLocked As Boolean = False If File.Exists(sLockFile) Then + Try + File.Delete(sLockFile) + Catch ex As Exception + bIsLocked = True + End Try + End If + + If bIsLocked Then ' leggere il nome dell'utente + Dim UserName As String = "" + Try + Dim nIndexFile As Integer = FreeFile() + FileSystem.FileOpen(nIndexFile, sLockFile, OpenMode.Input, OpenAccess.Read, OpenShare.Shared) + UserName = FileSystem.LineInput(nIndexFile) + FileSystem.FileClose(nIndexFile) + Catch ex As Exception + End Try + If OptionModule.m_SingleDoor Then If bSendMsg Then - Dim sMsg As String = String.Format(EgtMsg(50524), sLockFile) + Dim sMsg As String = String.Format(EgtMsg(50524), sLockFile, UserName) MessageBox.Show(sMsg, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk) End If OutLog("File in reading : " & sLockFile) Else If bSendMsg Then ' directory in reading by another EgtDOORCreator. - Dim sMsg As String = String.Format(EgtMsg(50525), sLockFile) + Dim sMsg As String = String.Format(EgtMsg(50525), sLockFile, UserName) MessageBox.Show(sMsg, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk) End If OutLog("Directoru in reading : " & CurrDirectory) @@ -66,21 +88,15 @@ Public Module Utility m_bIsLock = False Return False End If - Dim sLockFile As String = CrateFileLock(CurrDirectory, CurrFile) - m_CurrLockFile = sLockFile + m_CurrLockFile = GenerateLockFileName(CurrDirectory, CurrFile) m_StopSaving = False 'If VerifyFileLocked(CurrDirectory, CurrFile) Then Return False Map.refMainWindowVM.AssemblyManagerControl.Visibility = Visibility.Visible Try Dim NomeUtente As String = Environment.MachineName & "/" & Environment.UserName - File.WriteAllText(sLockFile, NomeUtente, Text.Encoding.UTF8) - - ' 'File.Open(sLockFile, FileMode.Open) - ' 'File.SetAccessControl(sLockFile, System.Security.AccessControl.FileSecur) - FileSystem.FileOpen(1, sLockFile, OpenMode.Output) - FileSystem.FilePut(1, True) - FileSystem.Lock(1) - + File.WriteAllText(m_CurrLockFile, NomeUtente, New System.Text.UTF8Encoding(False)) + m_nIndexLockFile = FreeFile() + FileSystem.FileOpen(m_nIndexLockFile, m_CurrLockFile, OpenMode.Append, OpenAccess.ReadWrite, OpenShare.LockWrite) m_bIsLock = True If String.IsNullOrEmpty(CurrFile) Then OutLog("Lock directory : " & m_CurrLockFile) @@ -98,8 +114,7 @@ Public Module Utility If Not m_bIsLock Then Return False ' se esiste chiudo il file lockdir della porta corrente Try - Unlock(1) - FileClose(1) + FileClose(m_nIndexLockFile) m_bIsLock = False OutLog("UnLock : " & m_CurrLockFile) Catch ex As Exception