Exemple #1
0
        static void Main(string[] args)
        {
            try
            {
                const string Path       = @"E:\123.txt";
                const string StreamName = "stream1";

                //FileInfo file = new FileInfo(Path);
                //if (!file.Exists)


                //if (!file.AlternateDataStreamExists(StreamName))
                //{
                //}

                if (!File.Exists(Path))
                {
                    throw new FileNotFoundException(null, Path);
                }

                if (!FileSystem.AlternateDataStreamExists(Path, StreamName))
                {
                    Console.WriteLine("Stream not found; creating it...");

                    AlternateDataStreamInfo data = FileSystem.GetAlternateDataStream(Path, StreamName);
                    FileStream fsWriter          = data.OpenWrite();
                    fsWriter.WriteByte(65);
                    fsWriter.Close();
                }
                else
                {
                    AlternateDataStreamInfo data = FileSystem.GetAlternateDataStream(Path, StreamName);
                    FileStream fsWriter          = data.OpenWrite();
                    fsWriter.WriteByte(97);
                    fsWriter.Close();
                }

                AlternateDataStreamInfo data1 = FileSystem.GetAlternateDataStream(Path, StreamName);

                FileStream fsReader1 = data1.OpenRead();
                byte[]     buffer    = new byte[100];
                fsReader1.Read(buffer, 0, Convert.ToInt32(fsReader1.Length));
                FileStream fsWriter1 = data1.OpenWrite();
                fsWriter1.WriteByte(49);
                fsWriter1.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            Console.ReadKey();
        }
Exemple #2
0
        public static MD5StreamStatus TestMD5Stream(FileInfo fileInfo)
        {
            byte[] fileHash = GetFileHash(fileInfo.FullName);
            AlternateDataStreamInfo md5StreamInfo = FileSystem.GetAlternateDataStream(fileInfo, MD5StreamName);

            if (md5StreamInfo.Exists)
            {
                Stream        md5Stream  = md5StreamInfo.OpenRead();
                MD5Descriptor descriptor = MD5Descriptor.ReadFromStream(md5Stream);
                if (descriptor == null)
                {
                    return(MD5StreamStatus.Invalid);
                }

                if (DateTime.Equals(fileInfo.LastWriteTimeUtc, descriptor.FileWriteTimeUtc))
                {
                    if (ByteUtils.AreByteArraysEqual(fileHash, descriptor.FileHash))
                    {
                        return(MD5StreamStatus.Correct);
                    }
                    else
                    {
                        return(MD5StreamStatus.Incorrect);
                    }
                }
                else // file was updated since MD5 was stored
                {
                    SaveMD5Stream(md5StreamInfo, fileHash, fileInfo.LastWriteTimeUtc);
                    // We revert to the last write time before the ADS was written
                    File.SetLastWriteTimeUtc(fileInfo.FullName, fileInfo.LastWriteTimeUtc);
                    return(MD5StreamStatus.Updated);
                }
            }
            else
            {
                SaveMD5Stream(md5StreamInfo, fileHash, fileInfo.LastWriteTimeUtc);
                // We revert to the last write time before the ADS was written
                File.SetLastWriteTimeUtc(fileInfo.FullName, fileInfo.LastWriteTimeUtc);
                return(MD5StreamStatus.Created);
            }
        }
Exemple #3
0
        private static Guid _GetID(string uri)
        {
            const string TID = "lguid";

            if (File.Exists(uri) || Directory.Exists(uri))
            {
                if (FileSystem.AlternateDataStreamExists(uri, TID))
                {
                    Logger.D("{0} begin reader", uri);
                    AlternateDataStreamInfo adfs = FileSystem.GetAlternateDataStream(uri, TID);

                    FileStream   fs   = adfs.OpenRead();
                    StreamReader sr   = new StreamReader(fs);
                    string       guid = sr.ReadToEnd();
                    Logger.D("{0} begin close", uri);
                    sr.Close();
                    fs.Close();
                    sr.Dispose();
                    fs.Dispose();
                    Logger.D("{0} close reader", uri);
                    return(Guid.Parse(guid));
                }
                else
                {
                    Guid id = Guid.NewGuid();
                    AlternateDataStreamInfo adfs = FileSystem.GetAlternateDataStream(uri, TID);
                    FileStream   fs = adfs.OpenWrite();
                    StreamWriter sw = new StreamWriter(fs);
                    sw.WriteLine(id.ToString());
                    sw.Close();
                    fs.Close();
                    sw.Dispose();
                    fs.Dispose();
                    return(id);
                }
            }
            else
            {
                return(Guid.NewGuid());
            }
        }