コード例 #1
0
        public static void Save(FileMode mode,
                                IEnumerable <KeyValuePair <FileInfo, KeyStringDictionary> > data)
        {
            if (null == data)
            {
                throw new ArgumentNullException("data");
            }

            var count = 0;

            using (var writers = new StreamWriterDictionary
            {
                Access = FileAccess.Write,
                Mode = mode,
                Share = FileShare.Read
            })
            {
                foreach (var item in data)
                {
                    if (0 == count)
                    {
                        writers.FirstLine = Header(item.Value);
                    }

                    writers.Item(item.Key).WriteLine(Line(item.Value));
                    count++;
                }
            }
        }
コード例 #2
0
        public virtual void Save(Lexicon lexicon)
        {
            Trace.WriteIf(Tracing.Is.TraceVerbose, string.Empty);
            if (null == lexicon)
            {
                throw new ArgumentNullException("lexicon");
            }

            using (var writers = new StreamWriterDictionary("CANONICAL,SYNONYMS")
            {
                Access = FileAccess.Write,
                Mode = FileMode.Create,
                Share = FileShare.None
            })
            {
#if NET20
                if (0 == IEnumerableExtensionMethods.Count(lexicon))
#else
                if (!lexicon.Any())
#endif
                {
                    writers.Item(Location.FullName).WriteLine(string.Empty);
                    return;
                }

#if NET20
                var items = new SortedList <string, LexicalItem>();
                foreach (var item in lexicon)
                {
                    items.Add(item.CanonicalForm, item);
                }

                foreach (var item in items)
                {
                    var synonyms = new SortedList <string, string>();
                    foreach (var synonym in item.Value.Synonyms)
                    {
                        synonyms.Add(synonym, synonym);
                    }

                    writers
                    .Item(Location.FullName)
                    .WriteLine(StringExtensionMethods.FormatWith(
                                   "{0},{1}",
                                   CsvStringExtensionMethods.FormatCommaSeparatedValue(item.Value.CanonicalForm),
                                   CsvStringExtensionMethods.FormatCommaSeparatedValue(IEnumerableExtensionMethods.Concat(synonyms.Values, ';'))));
                }
#else
                foreach (var item in lexicon.OrderBy(x => x.CanonicalForm))
                {
                    writers
                    .Item(Location.FullName)
                    .WriteLine("{0},{1}".FormatWith(
                                   item.CanonicalForm.FormatCommaSeparatedValue(),
                                   item.Synonyms.OrderBy(x => x).Concat(';').FormatCommaSeparatedValue()));
                }
#endif
            }
        }
コード例 #3
0
        public void op_Dispose()
        {
            using (var file = new TempFile())
            {
                var obj = new StreamWriterDictionary();

                obj.Dispose();

                // ReSharper disable AccessToDisposedClosure
                Assert.Throws<InvalidOperationException>(() => obj.Item(file.Info));

                // ReSharper restore AccessToDisposedClosure
            }
        }
コード例 #4
0
ファイル: DataFileCreation.cs プロジェクト: KarlDirck/cavity
        public int Create(IEnumerable<KeyStringDictionary> data)
        {
            if (null == data)
            {
                throw new ArgumentNullException("data");
            }

            if (Destination.Exists)
            {
                throw new IOException("\"{0}\" already exists.".FormatWith(Destination.FullName));
            }

            Count = 0;
            Stopwatch = new Stopwatch();
            Stopwatch.Start();

            using (var temp = new TempFile(CurrentTempDirectory.Location))
            {
                using (var writers = new StreamWriterDictionary())
                {
                    foreach (var entry in data)
                    {
                        Count++;
                        if (null == writers.FirstLine)
                        {
                            writers.FirstLine = Csv.Header(entry);
                        }

                        writers.Item(temp.Info).WriteLine(Csv.Line(entry));
                    }
                }

                if (Count.IsNot(0))
                {
                    temp.Info.CopyTo(Destination);

                    Destination.SetDate(Modified);
                }
            }

            Stopwatch.Stop();
            return Count;
        }
コード例 #5
0
ファイル: TempCsvFile.cs プロジェクト: KarlDirck/cavity
        public TempCsvFile(IEnumerable<KeyStringDictionary> data)
            : base(CurrentTempDirectory.Location)
        {
            if (null == data)
            {
                throw new ArgumentNullException("data");
            }

            using (var writers = new StreamWriterDictionary())
            {
                foreach (var entry in data)
                {
                    if (null == writers.FirstLine)
                    {
                        writers.FirstLine = Csv.Header(entry);
                    }

                    writers.Item(Info).WriteLine(Csv.Line(entry));
                }
            }
        }
コード例 #6
0
        public static void Save(IEnumerable <KeyStringDictionary> data,
                                Func <KeyStringDictionary, FileInfo> file)
        {
            if (null == data)
            {
                throw new ArgumentNullException("data");
            }

            if (null == file)
            {
                throw new ArgumentNullException("file");
            }

            var first = true;

            using (var writers = new StreamWriterDictionary
            {
                Access = FileAccess.Write,
                Mode = FileMode.Append,
                Share = FileShare.Read
            })
            {
                foreach (var entry in data)
                {
                    if (first)
                    {
                        writers.FirstLine = Header(entry);
                        first             = false;
                    }

                    var info = file(entry);
                    if (null != info.Directory && !info.Directory.Exists)
                    {
                        info.Directory.Create();
                    }

                    writers.Item(info).WriteLine(Line(entry));
                }
            }
        }
コード例 #7
0
        public void op_Item_FileInfo()
        {
            using (var file = new TempFile())
            {
                using (var obj = new StreamWriterDictionary())
                {
                    obj.Item(file.Info).Write("example");
                }

                file.Info.Refresh();
                Assert.True(file.Info.Exists);
            }
        }
コード例 #8
0
        public void op_Item_string_string_FileModeTruncate_FileAccessReadWrite_FileShareWrite_whenCalledAgain()
        {
            using (var file = new TempFile())
            {
                using (var obj = new StreamWriterDictionary("example"))
                {
                    obj.Item(file.Info.FullName, "one", FileMode.Truncate, FileAccess.ReadWrite, FileShare.Write).Write("two");
                }

                using (var obj = new StreamWriterDictionary("example"))
                {
                    obj.Item(file.Info.FullName, "one", FileMode.Truncate, FileAccess.ReadWrite, FileShare.Write).Write("two");
                }

                var expected = "one{0}two".FormatWith(Environment.NewLine);
                var actual = File.ReadAllText(file.Info.FullName);

                Assert.Equal(expected, actual);
            }
        }
コード例 #9
0
        public void op_Item_string_stringNull_FileModeTruncate_FileAccessReadWrite_FileShareWrite()
        {
            using (var file = new TempFile())
            {
                using (var obj = new StreamWriterDictionary())
                {
                    obj.Item(file.Info.FullName, null, FileMode.Truncate, FileAccess.ReadWrite, FileShare.Write);
                }

                var expected = string.Empty;
                var actual = File.ReadAllText(file.Info.FullName);

                Assert.Equal(expected, actual);
            }
        }
コード例 #10
0
        public void op_Item_string_stringEmpty_FileModeCreate_FileAccessReadWrite_FileShareWrite_whenCalledAgain()
        {
            using (var file = new TempFile())
            {
                file.Info.Delete();

                using (var obj = new StreamWriterDictionary())
                {
                    obj.Item(file.Info.FullName, string.Empty, FileMode.Create, FileAccess.ReadWrite, FileShare.Write);
                }

                using (var obj = new StreamWriterDictionary())
                {
                    obj.Item(file.Info.FullName, string.Empty, FileMode.Create, FileAccess.ReadWrite, FileShare.Write);
                }

                var expected = Environment.NewLine;
                var actual = File.ReadAllText(file.Info.FullName);

                Assert.Equal(expected, actual);
            }
        }
コード例 #11
0
        public void op_Item_string_string()
        {
            using (var file = new TempFile())
            {
                using (var obj = new StreamWriterDictionary())
                {
                    obj.Item(file.Info.FullName, "one").Write("two");
                }

                var expected = "one{0}two".FormatWith(Environment.NewLine);
                var actual = File.ReadAllText(file.Info.FullName);

                Assert.Equal(expected, actual);
            }
        }
コード例 #12
0
        public void op_Item_string_caseInsensitive()
        {
            using (var temp = new TempDirectory())
            {
                var lower = temp.Info.ToFile("abc");
                var upper = temp.Info.ToFile("ABC");
                using (var obj = new StreamWriterDictionary())
                {
                    obj.Item(lower.FullName).Write("example");
                    obj.Item(upper.FullName).Write("example");
                }

                const int expected = 1;
                var actual = temp.Info.GetFiles().Length;

                Assert.Equal(expected, actual);
            }
        }
コード例 #13
0
        public void op_Item_string_FileModeOpenOrCreate_FileAccessReadWrite_FileShareWrite()
        {
            using (var file = new TempFile())
            {
                file.Info.Delete();

                using (var obj = new StreamWriterDictionary("one"))
                {
                    obj.Item(file.Info.FullName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Write).Write("two");
                }

                var expected = "one{0}two".FormatWith(Environment.NewLine);
                var actual = File.ReadAllText(file.Info.FullName);

                Assert.Equal(expected, actual);
            }
        }
コード例 #14
0
        public void op_Item_stringNull()
        {
            using (var obj = new StreamWriterDictionary())
            {
                // ReSharper disable AccessToDisposedClosure
                Assert.Throws<ArgumentNullException>(() => obj.Item(null as string));

                // ReSharper restore AccessToDisposedClosure
            }
        }
コード例 #15
0
ファイル: Tsv.cs プロジェクト: KarlDirck/cavity
        public static void Save(IEnumerable<KeyStringDictionary> data,
                                Func<KeyStringDictionary, FileInfo> file)
        {
            if (null == data)
            {
                throw new ArgumentNullException("data");
            }

            if (null == file)
            {
                throw new ArgumentNullException("file");
            }

            var first = true;
            using (var writers = new StreamWriterDictionary
                                     {
                                         Access = FileAccess.Write,
                                         Mode = FileMode.Append,
                                         Share = FileShare.Read
                                     })
            {
                foreach (var entry in data)
                {
                    if (first)
                    {
                        writers.FirstLine = Header(entry);
                        first = false;
                    }

                    var info = file(entry);
                    if (null != info.Directory && !info.Directory.Exists)
                    {
                        info.Directory.Create();
                    }

                    writers.Item(info).WriteLine(Line(entry));
                }
            }
        }
コード例 #16
0
ファイル: CsvLexiconStorage.cs プロジェクト: KarlDirck/cavity
        public virtual void Save(Lexicon lexicon)
        {
            Trace.WriteIf(Tracing.Is.TraceVerbose, string.Empty);
            if (null == lexicon)
            {
                throw new ArgumentNullException("lexicon");
            }

            using (var writers = new StreamWriterDictionary("CANONICAL,SYNONYMS")
                                     {
                                         Access = FileAccess.Write,
                                         Mode = FileMode.Create,
                                         Share = FileShare.None
                                     })
            {
#if NET20
                if (0 == IEnumerableExtensionMethods.Count(lexicon))
#else
                if (!lexicon.Any())
#endif
                {
                    writers.Item(Location.FullName).WriteLine(string.Empty);
                    return;
                }

#if NET20
                var items = new SortedList<string, LexicalItem>();
                foreach (var item in lexicon)
                {
                    items.Add(item.CanonicalForm, item);
                }

                foreach (var item in items)
                {
                    var synonyms = new SortedList<string, string>();
                    foreach (var synonym in item.Value.Synonyms)
                    {
                        synonyms.Add(synonym, synonym);
                    }

                    writers
                        .Item(Location.FullName)
                        .WriteLine(StringExtensionMethods.FormatWith(
                            "{0},{1}", 
                            CsvStringExtensionMethods.FormatCommaSeparatedValue(item.Value.CanonicalForm), 
                            CsvStringExtensionMethods.FormatCommaSeparatedValue(IEnumerableExtensionMethods.Concat(synonyms.Values, ';'))));
                }
#else
                foreach (var item in lexicon.OrderBy(x => x.CanonicalForm))
                {
                    writers
                        .Item(Location.FullName)
                        .WriteLine("{0},{1}".FormatWith(
                                                        item.CanonicalForm.FormatCommaSeparatedValue(),
                                                        item.Synonyms.OrderBy(x => x).Concat(';').FormatCommaSeparatedValue()));
                }

#endif
            }
        }