public ServiceResult PaylasilanaEkle(DosyaYukleme yuklenecekDosya, int klasorId)
        {
            ServiceResult result = new ServiceResult();

            using (var transaction = db.Database.BeginTransaction())
            {
                try
                {
                    foreach (var item in yuklenecekDosya.Files)
                    {
                        var filename = Path.GetFileName(item.FileName);
                        var icindebulundugumklasorunid = klasorId;
                        var icindeoldugumklasorunpathi = db.Paylasilanlar.Where(x => x.DosyaId == klasorId).Select(x => x.PaylasilaninYolu).Single();
                        var path        = icindeoldugumklasorunpathi + @"\" + filename;
                        var isPathExist = db.Dosya.Any(x => x.DosyaYolu == path && x.Durumu != true);
                        if (isPathExist == true)
                        {
                            result.Code = 0;
                            result.Data = "Aynı dosyadan var. Farklı bir dosya deneyiniz.";
                            return(result);
                        }
                        else
                        {
                            if (item.Length < 0)
                            {
                                result.Code = 1;
                                result.Data = "Oluşturulamadı";
                                return(result);
                            }
                            Paylasilanlar paylas                      = db.Paylasilanlar.SingleOrDefault(x => x.DosyaId == klasorId);
                            var           paylasilankisi              = paylas.PaylasilanKisi;
                            var           kimpaylasti                 = paylas.KimPaylasti;
                            var           yetkiid                     = paylas.Yetki;
                            var           paylasilaninyolu            = paylas.PaylasilaninYolu;
                            var           parentid                    = paylas.PaylasilanlarinParentId;
                            var           icindeoldugumklasorunpathi1 = db.Dosya.Where(x => x.DosyaId == klasorId && x.DosyaMi == null).Select(x => x.DosyaYolu).Single();
                            var           path1 = icindeoldugumklasorunpathi1 + @"\" + filename;
                            DosyaTB_Ekle(path1, Convert.ToInt32(item.Length), Path.GetExtension(filename), filename, klasorId, (int)kimpaylasti, true);
                            var dosyaid = db.Dosya.Where(x => x.DosyaYolu == path1).Select(x => x.DosyaId).Single();
                            PaylasilanlarTB_Ekle(dosyaid, filename, (int)paylasilankisi, (int)kimpaylasti, (int)yetkiid, path, klasorId, true);
                            item.CopyTo(new FileStream(path, FileMode.Create));
                            item.CopyTo(new FileStream(path1, FileMode.Create));
                        }
                        transaction.Commit();
                        result.Code = 2;
                        result.Data = "Islem Basarili";
                        return(result);
                    }
                }
                catch (Exception)
                {
                    result.Code = 3;
                    result.Data = "Bir hata meydana geldi. Lütfen yükleme yapmayı tekrar deneyiniz.";
                    transaction.Rollback();
                    return(result);
                }
                return(result);
            }
        }
        public void PaylasilanlarTB_Ekle(int DosyaId, string Adi, int PaylasilanKisi, int KimPaylasti, int Yetki, string PaylasilaninYolu, int?PaylasilanlarinParentId, bool DosyaMi)
        {
            Paylasilanlar paylas = new Paylasilanlar
            {
                DosyaId                 = DosyaId,
                Adi                     = Adi,
                PaylasilanKisi          = PaylasilanKisi,
                KimPaylasti             = KimPaylasti,
                PaylasilmaTarihi        = DateTime.Now,
                Yetki                   = Yetki,
                PaylasilaninYolu        = PaylasilaninYolu,
                PaylasilanlarinParentId = PaylasilanlarinParentId,
                DosyaMi                 = DosyaMi
            };

            db.Paylasilanlar.Add(paylas);
            db.SaveChanges();
        }
        public ServiceResult IcShare(string DosyaId, string KullaniciId, string Checked, string session)
        {
            ServiceResult result = new ServiceResult();

            if (String.IsNullOrWhiteSpace(DosyaId))
            {
                result.Code    = 0;
                result.Message = "Bir dosya secimi yapılmadı!!! Lutfen paylasmak istediginiz dosyayi seciniz..";
                return(result);
            }
            if (String.IsNullOrWhiteSpace(KullaniciId))
            {
                result.Code    = 0;
                result.Message = "Kullanıcı secimi yapılmadı!!! Lutfen bir kullanici seciniz..";
                return(result);
            }
            if (String.IsNullOrWhiteSpace(Checked))
            {
                result.Code    = 0;
                result.Message = "Yetki Secimi Yapılmadı!!! Lutfen bir yetki secimi yapiniz..";
                return(result);
            }
            string[]     parcalar = ExtensionMethod.Parcala(DosyaId);
            List <int>   dosyaIds = Array.ConvertAll(parcalar, int.Parse).ToList();
            List <Dosya> dosya    = db.Dosya.Where(x => dosyaIds.Any(v => v == x.DosyaId && x.DosyaMi == true && x.Durumu == null)).ToList();
            List <Dosya> klasor   = db.Dosya.Where(x => dosyaIds.Any(v => v == x.DosyaId) && x.DosyaMi == null && x.Durumu == null).ToList(); // klasorleri bul

            int[] KullaniciIdArray = KullaniciId.Split(',').Select(int.Parse).ToArray();
            var   list             = new List <int>(KullaniciIdArray);

            int[] yetkiIdArray = Checked.Split(',').Select(int.Parse).ToArray();
            var   yetkiliste   = new List <int>(yetkiIdArray);
            var   yetki        = (yetkiliste.Count == 1) ? Convert.ToInt32(Checked) : 3;

            for (int i = 0; i < dosya.Count; i++)
            {
                var dosyaid                = dosya[i].DosyaId;
                var dosyayolu              = dosya[i].DosyaYolu;
                var dosyaismi              = dosya[i].DosyaAdi;
                var dosyaparent            = dosya[i].ParentId;
                List <Kullanici> kullanici = db.Kullanici.Where(x => list.Any(v => v == x.KullaniciId)).ToList();
                Paylasilanlar    paylas    = new Paylasilanlar();
                for (int m = 0; m < kullanici.Count; m++)
                {
                    var kullaniciid = kullanici[m].KullaniciId;
                    var pathtemp    = Path.Combine(hostingEnvironment.WebRootPath, "Dosyalarım", kullaniciid.ToString());
                    var path        = Path.Combine(pathtemp, "Paylasilanlar", kullaniciid.ToString(), dosyaismi);
                    var targetpath  = Path.Combine(pathtemp, "Paylasilanlar", kullaniciid.ToString());
                    var ispathexist = db.Paylasilanlar.Any(x => x.PaylasilaninYolu == path);
                    if (ispathexist != true)
                    {
                        var sonuc       = (dosya[0].ParentId != null) ? null : dosyaparent;
                        var sessionkisi = Convert.ToInt32(session);
                        PaylasilanlarTB_Ekle(dosyaid, dosyaismi, kullaniciid, sessionkisi, yetki, path, sonuc, true);
                        result.Code    = 1;
                        result.Message = "Başarılı";
                        if (!System.IO.Directory.Exists(targetpath))
                        {
                            System.IO.Directory.CreateDirectory(targetpath);
                        }
                        System.IO.File.Copy(dosyayolu, path, true);
                    }
                }
            }
            for (int i = 0; i < klasor.Count; i++)
            {
                var klasorid               = klasor[i].DosyaId;
                var klasorismi             = klasor[i].DosyaAdi;
                var klasoryolu             = klasor[i].DosyaYolu;
                var klasorparentcheck      = klasor[i].ParentId;
                List <Kullanici> kullanici = db.Kullanici.Where(x => list.Any(v => v == x.KullaniciId)).ToList();
                for (int m = 0; m < kullanici.Count; m++)
                {
                    var kullaniciid  = kullanici[m].KullaniciId;
                    var pathtemp     = Path.Combine(hostingEnvironment.WebRootPath, "Dosyalarım", kullaniciid.ToString());
                    var path         = Path.Combine(pathtemp, "Paylasilanlar", kullaniciid.ToString(), klasorismi);
                    var targetpath   = Path.Combine(pathtemp, "Paylasilanlar", kullaniciid.ToString());
                    var altklasorler = db.Dosya.Where(x => x.DosyaYolu.Contains(klasoryolu) && x.DosyaMi == null && x.Durumu == null).Select(x => x).ToList();
                    var altdosyalar  = db.Dosya.Where(x => x.DosyaYolu.Contains(klasoryolu) && x.DosyaMi == true && x.Durumu == null).Select(x => x).ToList();
                    for (int x = 0; x < altklasorler.Count; x++)
                    {
                        var parentid            = altklasorler[x].ParentId;
                        var klasorunparentpathi = db.Dosya.Where(d => d.DosyaId == parentid).Select(d => d.DosyaYolu).SingleOrDefault();
                        var parentpath          = klasorunparentpathi.ToString();
                        var remove       = parentpath.Remove(0, 64);
                        var paylasmayolu = targetpath + @"\" + remove + @"\" + altklasorler[x].DosyaAdi;
                        var ispathexist  = db.Paylasilanlar.Any(k => k.PaylasilaninYolu == paylasmayolu);
                        if (ispathexist != true)
                        {
                            var sonuc       = (x == 0) ? null : parentid;
                            var sessionkisi = Convert.ToInt32(session);
                            PaylasilanlarTB_Ekle(altklasorler[x].DosyaId, altklasorler[x].DosyaAdi, kullaniciid, sessionkisi, yetki, paylasmayolu, sonuc, null);
                            result.Code    = 1;
                            result.Message = "Başarılı";
                        }
                    }
                    if (!System.IO.Directory.Exists(path))
                    {
                        System.IO.Directory.CreateDirectory(path);
                    }
                    for (int x = 0; x < altdosyalar.Count; x++)
                    {
                        var dosyayolu           = altdosyalar[x].DosyaYolu;
                        var altdosyaparent      = altdosyalar[x].ParentId;
                        var dosyanınparentpathi = db.Dosya.Where(s => s.DosyaId == altdosyaparent && s.DosyaMi == null && s.Durumu == null).Select(s => s.DosyaYolu).SingleOrDefault();
                        var remove       = dosyanınparentpathi.Remove(0, 64);
                        var pathchecking = targetpath + @"\" + remove + @"\" + altdosyalar[x].DosyaAdi;
                        var ispathexist  = db.Paylasilanlar.Any(k => k.PaylasilaninYolu == pathchecking);
                        if (ispathexist != true)
                        {
                            var sessionkullaniciId = Convert.ToInt32(session);
                            PaylasilanlarTB_Ekle(altdosyalar[x].DosyaId, altdosyalar[x].DosyaAdi, kullaniciid, sessionkullaniciId, yetki, pathchecking, altdosyalar[x].ParentId, true);
                            result.Code    = 1;
                            result.Message = "Başarılı";
                        }
                    }
                    foreach (string dirPath in Directory.GetDirectories(klasoryolu, "*", SearchOption.AllDirectories))
                    {
                        Directory.CreateDirectory(dirPath.Replace(klasoryolu, path));
                    }
                    foreach (string newPath in Directory.GetFiles(klasoryolu, "*.*",
                                                                  SearchOption.AllDirectories))
                    {
                        System.IO.File.Copy(newPath, newPath.Replace(klasoryolu, path), true);
                    }
                }
            }
            return(result);
        }