public async Task <Storage.FileInfo> GetFileInfoAsync(string fileName)
 {
     if (string.IsNullOrWhiteSpace(fileName))
     {
         throw new ArgumentException();
     }
     return(await DataFilesStorage.GetFileInfo(fileName) ?? throw new InvalidOperationException());
 }
 public IAsyncEnumerable <XmlDocument> GetAsyncChunks(string fileName)
 {
     return(new XmlDataFilesAsyncEnum(() =>
     {
         var readStream = DataFilesStorage.GetReadStream(fileName);
         return XmlReader.Create(readStream, GetReaderSettings());
     }));
 }
        public async Task <bool> CreateDataFileAsync(string fileName)
        {
            var xmlDoc  = new XmlDocument();
            var rootElm = xmlDoc.CreateElement(XmlDataFileNodeNames.Root);

            xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", ""));
            xmlDoc.AppendChild(rootElm);

            xmlDoc.DocumentElement.SetAttribute("xmlns", XmlDataFileSchemaInfo.TargetNamespace);
            xmlDoc.DocumentElement.SetAttribute("xmlns:xs", XmlDataFileSchemaInfo.XmlSchemaInstance);
            xmlDoc.DocumentElement.SetAttribute("schemaLocation", XmlDataFileSchemaInfo.XmlSchemaInstance,
                                                string.Concat(XmlDataFileSchemaInfo.TargetNamespace, " ", XmlDataFileSchemaInfo.XmlSchemaFileUrl));

            rootElm.IsEmpty = false;

            var result = await DataFilesStorage.CreateFileAsync(fileName, Encoding.UTF8.GetBytes(xmlDoc.OuterXml));

            return(result);
        }
        public async Task WriteXmlAsync(string fileName, string xmlStr)
        {
            if (!DataFilesStorage.Exists(fileName))
            {
                await CreateDataFileAsync(fileName);
            }

            var cusXmlDoc = new XmlDocument();

            cusXmlDoc.LoadXml(xmlStr);

            using var ws         = DataFilesStorage.GetWriteStream(fileName);
            using var bufferedSt = new BufferedStream(ws, FilesIoOptions.BufferSize);

            var cTag   = string.Concat("</", XmlDataFileNodeNames.Root, ">");
            var buffer = Encoding.UTF8.GetBytes(cusXmlDoc.DocumentElement.InnerXml);

            bufferedSt.Position = ws.Length - cTag.Length;
            await bufferedSt.WriteAsync(buffer);

            await bufferedSt.WriteAsync(Encoding.UTF8.GetBytes(cTag));
        }
        public async Task <bool> ValidateXmlFile(string fileName)
        {
            var settings = GetReaderSettings();

            using var st     = DataFilesStorage.GetReadStream(fileName);
            using var reader = XmlReader.Create(st, settings);
            var result = true;

            try
            {
                while (await reader.ReadAsync())
                {
                }
            }
            catch (Exception ex)
            {
                result = false;
            }

            reader.Dispose();
            await st.DisposeAsync();

            return(result);
        }
 public async Task <bool> DeleteDataFileAsync(string fileName)
 {
     return(await DataFilesStorage.DeleteFileAsync(fileName));
 }
 public async Task <Storage.FileInfo[]> GetFilesInfoAsync()
 {
     return(await DataFilesStorage.GetFilesInfo());
 }
 public bool Exists(string fileName)
 {
     return(DataFilesStorage.Exists(fileName));
 }