예제 #1
0
        private void saveBtn_Click(object sender, EventArgs e)
        {
            var selectedDevice = (DeviceModel)(allDevicesCb.SelectedItem);
            var storageModel   = (DataStorageConfigModel)fileTypeSelectionCb.SelectedItem;
            var operatorModel  = (OperatorModel)operatorsCb.SelectedItem;
            var facilityModel  = (FacilityModel)facilitiesCb.SelectedItem;
            var activeChannels = GetActiveChannels();
            var configBox      = (IDeviceConfigControl)deviceSettingsContainer.Controls[0];
            var devConfig      = configBox.GetDeviceConfig();

            if (devConfig != null && selectedDevice != null && storageModel != null)
            {
                this.DialogResult = DialogResult.OK;
                currentDevice     = DeviceFactory.CreateDevice(selectedDevice);
                var devInterface = PeripheralFactory.CreatePeripheral(devConfig);
                var dataWriter   = DataWriterFactory.CreateDataWriter(fileNameTb.Text, storageModel.Type);
                var errorHandler = new FileErrorHandler("application_errors.txt");

                dataWriter.create();
                dataWriter.open();
                dataWriter.writeHeader(activeChannels, operatorModel, facilityModel);
                dataWriter.close();

                currentDevice.SetDataWriter(dataWriter);
                currentDevice.SetPeripheralInterface(devInterface);
                currentDevice.SetErrorHandler(errorHandler);

                this.Close();
            }
        }
예제 #2
0
 ///
 /// <summary>
 /// Alternate form of directory-copy, always copy subdirectories.
 /// </summary>
 /// <param name="InName">Input directory name.</param>
 /// <param name="OutName">Output directory name.</param>
 /// <param name="CheckAttr">true to reset attributes of existing files before copying
 /// (allows r/o files to be overwritten).</param>
 /// <param name="PreserveTime">true to preserve the timestamp from the input file.</param>
 /// <param name="ErrorHandler">Error handler for a file copy failure.</param>
 /// <returns>error message if copy failed, otherwise null.</returns>
 ///
 public static string CopyDirectory(string InName, string OutName,
                                    bool CheckAttr, bool PreserveTime, FileErrorHandler ErrorHandler)
 {
     return(CopyDirectory(InName, OutName, true, CheckAttr, PreserveTime, false, false, ErrorHandler));
 }
예제 #3
0
 ///
 /// <summary>
 /// Copy a directory, including all files and [optionally] subdirectories.
 /// </summary>
 /// <param name="InName">Input directory name.</param>
 /// <param name="OutName">Output directory name.</param>
 /// <param name="IncludeDirs">true to include subdirectories.</param>
 /// <param name="CheckAttr">true to reset attributes of existing files before copying
 /// (allows r/o files to be overwritten).</param>
 /// <param name="PreserveTime">true to preserve the timestamp from the input file.</param>
 /// <param name="OnlyNew">True to only copy new files (no existing file).</param>
 /// <param name="ErrorHandler">Error handler for a file copy failure.</param>
 /// <returns>error message if copy failed, otherwise null.</returns>
 ///
 public static string CopyDirectory(string InName, string OutName,
                                    bool IncludeDirs, bool CheckAttr, bool PreserveTime,
                                    bool OnlyNew, FileErrorHandler ErrorHandler)
 {
     return(CopyDirectory(InName, OutName, IncludeDirs, CheckAttr, PreserveTime, OnlyNew, false, ErrorHandler));
 }
예제 #4
0
        ///
        /// <summary>
        /// Copy a directory, including all files and [optionally] subdirectories.
        /// </summary>
        /// <param name="InName">Input directory name.</param>
        /// <param name="OutName">Output directory name.</param>
        /// <param name="IncludeDirs">true to include subdirectories.</param>
        /// <param name="CheckAttr">true to reset attributes of existing files before copying
        /// (allows r/o files to be overwritten).</param>
        /// <param name="PreserveTime">true to preserve the timestamp from the input file.</param>
        /// <param name="OnlyNew">True to only copy new files (no existing file).</param>
        /// <param name="KeepNewest">true to retain any newer existing file.</param>
        /// <param name="ErrorHandler">Error handler for a file copy failure.</param>
        /// <returns>error message if copy failed, otherwise null.</returns>
        ///
        public static string CopyDirectory(string InName, string OutName,
                                           bool IncludeDirs, bool CheckAttr, bool PreserveTime,
                                           bool OnlyNew, bool KeepNewest, FileErrorHandler ErrorHandler)
        {
            if (!Directory.Exists(InName))
            {
                return("Directory " + InName + " does not exist!");
            }

            try
            {
                DirectoryInfo Input = new DirectoryInfo(InName);
                if (!Directory.Exists(OutName))
                {
                    Directory.CreateDirectory(OutName);
                }

                if (IncludeDirs)
                {
                    DirectoryInfo[] SubDirs = Input.GetDirectories();
                    foreach (DirectoryInfo DirName in SubDirs)
                    {
                        string ErrMsg = CopyDirectory(Path.Combine(InName, DirName.Name),
                                                      Path.Combine(OutName, DirName.Name), true,
                                                      CheckAttr, PreserveTime, false, ErrorHandler);
                        if (ErrMsg != null)
                        {
                            return(ErrMsg);
                        }
                    }
                }

                FileInfo[] InFiles = Input.GetFiles();
                foreach (FileInfo InFile in InFiles)
                {
                    string FileName = Path.Combine(OutName, InFile.Name);

                    if (File.Exists(FileName))
                    {
                        if (OnlyNew)
                        {
                            continue;
                        }
                        if (KeepNewest)
                        {
                            DateTime OldFileTime = DataConverter.ReadDateToSecond(File.GetLastWriteTimeUtc(FileName));
                            DateTime NewFileTime = DataConverter.ReadDateToSecond(InFile.LastWriteTimeUtc);
                            if (OldFileTime > NewFileTime)
                            {
                                continue;
                            }
                        }
                        if (CheckAttr)
                        {
                            File.SetAttributes(FileName, FileAttributes.Normal);
                        }
                    }

                    // Make sure not Hidden
                    FileAttributes TempAtt = InFile.Attributes;
                    if ((TempAtt & FileAttributes.Hidden) != FileAttributes.Hidden)
                    {
                        bool Retry  = true;
                        bool Copied = false;
                        while (Retry)
                        {
                            try
                            {
                                Retry = false;
                                InFile.CopyTo(FileName, true);
                                Copied = true;
                            }
                            catch (Exception ex)
                            {
                                if (ErrorHandler == null)
                                {
                                    throw;
                                }

                                FileErrorEvent  Ev     = new FileErrorEvent(InFile, FileName, ex);
                                FileErrorAction Action = ErrorHandler(Ev);
                                switch (Action)
                                {
                                case FileErrorAction.Cancel:
                                    return(Ev.ReturnMsg);

                                case FileErrorAction.Retry:
                                    Retry = true;
                                    break;

                                default:
                                    break;
                                }
                            }
                        }

                        if (PreserveTime && Copied)
                        {
                            FileAttributes NewAttr = 0;
                            if (InFile.IsReadOnly)
                            {
                                NewAttr  = File.GetAttributes(FileName);
                                NewAttr &= ~FileAttributes.ReadOnly;
                                File.SetAttributes(FileName, NewAttr);
                            }
                            File.SetCreationTimeUtc(FileName, InFile.CreationTimeUtc);
                            File.SetLastAccessTimeUtc(FileName, InFile.LastAccessTimeUtc);
                            File.SetLastWriteTimeUtc(FileName, InFile.LastWriteTimeUtc);
                            if (InFile.IsReadOnly)
                            {
                                NewAttr |= FileAttributes.ReadOnly;
                                File.SetAttributes(FileName, NewAttr);
                            }
                        }
                    }
                }
            }

            catch (Exception ex)
            {
                return(ex.Message);
            }

            return(null);
        }