Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

hızlı dosya kopyalama

Konu, 'C / C++' kısmında stan tarafından paylaşıldı.

  1. stan

    stan Yeni Üye

    Kayıt:
    26 Ekim 2004
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    merhaba arkadaşlar.
    c++ ile hızlı dosya kopyalama nasıl yapabilirim
     
  2. pulsar

    pulsar Üye

    Kayıt:
    6 Temmuz 2004
    Mesajlar:
    177
    Beğenilen Mesajlar:
    0
    Meslek:
    engineer
    Şehir:
    Turkey
    Fork ile bir sürü prosedür açarsın ve bu prosedürlerin hepsi bir dosyadan okur. Hepsi de diğer bir dosyaya yazar. Sonra dosya başlıklarını birleştirirsin. (FAT VFAT vs vs krallarla). Hızlı kopyalama benim bildiğim böyle yapılır.
     
  3. stan

    stan Yeni Üye

    Kayıt:
    26 Ekim 2004
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    ya şimdi adam dosya yolunu girecek iki dosya yolunuda hemen bir dosyayı diğer dosyaya yollayacak..ama yollarken önce sıkıştırma algoritmasına göre sıkıştıracak hızlı gitmesi için daha sonra bunu çözerek kopyalamayı bitirecek
     
  4. Maltanar

    Maltanar Yeni Üye

    Kayıt:
    30 Mayıs 2004
    Mesajlar:
    4
    Beğenilen Mesajlar:
    0
    (@Pulsar, yazdığın mesajları win32 sistemlerine biraz daha uygun yazarsan sanırım forumdaki herkes daha mutlu olacak. Yardımcı olmaya çalışıyorsun ama bence bir dahaki sefere forumdaki çoğu insanın low-level işlemlere aşina olmadığını hatırla.)

    Win32 altında birden fazla "prosedür" açma nasıl oluyor anlamadım. Eğer thread kastediliyorsa bütün bu threadların bir dosyaya aynı anda senkronize bir şekilde yazması gerekecek. Senkronize okuma neyse de senkronize yazma için OpenFile'a nasıl bir flag geçilmesi gerekir emin değilim.


    En hızlı ve verimsiz sıkıştırma algoritması bile donanımın gerçekleştirdiği "basit" kopyala-yaz işleminden kat kat yavaştır, bu yüzden bu yöntem dosya kopyalamanın "hızlı" bir yolu olamaz. Hatta dosya kopyalamanın hızlandırılması konusunda sadece iki şey yapılabilir gibi görünüyor:

    -donanımsal olarak HD'nin okuma/yazma hızını arttırmak
    -defragmantation (disk birleştirme) yapmak

    Bunlar dışında kullanılacak her yöntem az çok aynı olacağından fazla bir performans kazancı sağlamayacaktır.
     
  5. IcenGuard

    IcenGuard Daimi Üye

    Kayıt:
    16 Ekim 2003
    Mesajlar:
    1,451
    Beğenilen Mesajlar:
    0
    Meslek:
    Aşcı
    Şehir:
    Ankara[3139.71,2532.11] Yediği Havuç: 38
    "dosya kopyalama" derken ne demek istiyorsun? kim nerden nereye kopyalıyor?

    @pulser
    eger aynı anda dosyaynın birkac yerine ulasırsan hızlanmak yerine daha da yavaslamaz mı sistem?
     
  6. acehreli

    acehreli Ali Çehreli

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    4,973
    Beğenilen Mesajlar:
    2
    Maltanar, pulsar'in onerdigi fork POSIX'e uyumlu oldugunu soyleyen Windows ortaminda da var.

    Forumda Win32'nin daha yaygin oldugu, veya belirli bir platforma oncelik verilmesi gerektigi fikirlerine katilmiyorum. Herkese yararli olabilmek icin standartlara olabildigince bagli kalmamiz gerekir. Standart C++, POSIX, vs.

    Bu soruda bilmedigimiz bir cok sey var. Ornegin nereden nereye kopyaliyoruz? Eger bilginin kopyalanacagi hedef NFS gibi bir ortamdaysa, sikistirma hiz saglayabilir. Ornegin, sikistirmanin SSH baglantilarinda hiz kazanci sagladigini kullananlarin deneyimlerinden biliyorum.

    stan, ben de IcenGuard'in sorusunu tekrarliyorum: hizli dosya kopyalamaktan ne kastediyorsun?

    Ali
     
  7. stan

    stan Yeni Üye

    Kayıt:
    26 Ekim 2004
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    ya sorun o zaten dosya şifrelenip sıkıştırıldığında işlem yavaşlıyor... işte bu veriyi alıp hızlı birşekilde nasıl kopyalama yada yollama işlemi gerçekleştirebilirim... parçalayarak mı?
    yoksa değişik bir yollamı?
     
  8. pulsar

    pulsar Üye

    Kayıt:
    6 Temmuz 2004
    Mesajlar:
    177
    Beğenilen Mesajlar:
    0
    Meslek:
    engineer
    Şehir:
    Turkey
    Arkadaşım win32de forc yerine createproc vardır. İkincisi bir dosyaya aynı anda bir sürü prosedür ile yamıyoruz bür sürü HDD dosya parçası yazıyoruz ve sonra bunların HDD başlangıç kısımlarını birleştiriyoruz. Dosya olarak düşünmeyin sektor olarak düşünün. Ben cevap verirken farklı mount edilmiş iki alandan bahsediyorum. Bu is için de HDDye sector bazlı yazma yetkiniz olması gerekiyor. Windows için admin olmalısınız ve ring 0 da çalışmalısınız. yani dosyaları değil sektörlerin kopyasını alıyorum. Prosedür sayım artınca sistemin bana ayırdığı kaynak artıyor. Tabi bunun da optimum sınırı var. Yoksa swich için geçen süre yer bitirir sizi.
     
  9. stan

    stan Yeni Üye

    Kayıt:
    26 Ekim 2004
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    sektörlerle işlem gerçekleşirse daha hızlı olurmu diyorsun? peki güvenlik açısından nasıl olur?...............
     
  10. Euclides

    Euclides Daimi Üye

    Kayıt:
    18 Nisan 2004
    Mesajlar:
    1,090
    Beğenilen Mesajlar:
    0
    Şehir:
    M86
    1..
    Pulsar -1 :(
    2...
    Zw*(CreateFile/OpenFile) API'lerinin senkronize(Disk Cahce kullanmadan) okuma/yazma için bir flagları var.(Şu an hatırlamıyorum DDK'ya bakmam lazım)

    Ayrıca SpinLock ları kullanarak Context switching mekanizmasını durdurabilirsiniz.
    Şüpesiz ki bu thread'a iyi bir hız kazancı sağlayacaktır.
    3....
    SpinLock'lar ve WinNT driver modeli için DDK'ya ve
    MS Press'den "Programming Microsoft Windows Driver Model" adlı kitaba başvurabilirsiniz.
     
  11. Volkan Uzun

    Volkan Uzun Daimi Üye

    Kayıt:
    14 Kasım 2002
    Mesajlar:
    3,312
    Beğenilen Mesajlar:
    0
    Meslek:
    Software Developer @ DELL
    Şehir:
    Skype
    @Euclides, spin locklar, multicpu lu makineler icin degilmiydi benmi yanlis hatirladim birden ?
     
  12. Euclides

    Euclides Daimi Üye

    Kayıt:
    18 Nisan 2004
    Mesajlar:
    1,090
    Beğenilen Mesajlar:
    0
    Şehir:
    M86
    http://msdn.microsoft.com/library/d..._387b61b6-b20f-4f17-be47-74c9ed3ac8a1.xml.asp
    Şüpesiz ki asıl amaçları o ancak tek cpu'lu makinalarda spin lock'ları güvenle kullanabilir.
    Ve bu sayede sadece kendi işleminin çalışmasını sağlayabilir.