none
Dosya taşımada promlem yaşıyorum. RRS feed

  • Soru

  • Merhaba;

    Ölçüm yaptığımız bir bilgisayar var.

    Her bir ölçümden sonra aynı isimli dosya oluşturuyor.(123456.dfq    gibi)Biz ayrı bir program ile bu klasördeki dosyayı server a çekiyoruz. Fakat server a  çekmeden yenibir ölçüm yapıldığında eski ölçümü siliyor ve yeni ölçümü dosyanın içine yazıyor. Bu da bizim için veri kaybı demek.

    Ölçüm yapan bilgisayarın yazılımına müdahale etme şansızmız yok. :(

    Bu sebeple şöyle çözüm düşündük. 

    Oluşan dosyanın klasörünü izleyip dosya oluşur oluşmaz başka bir klasöre tarih zaman vb.. ile yeniden adlandırıp taşımak istedik.

    Alttaki gibi bir kod yazdık.Programı çalıştırdığımda ilk dosya oluşunca sorunsuz çalışıyor.

    ikinci bir dosya oluştuğunda  resimdeki hatayı veriyor.

    Problem nedir.

    Yardımlarınız için şimdiden teşekkürler.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Windows.Forms;
    
    namespace filesystemwatcher_ile_yeniden_adlandir
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public string kaynak_klasor, hedef_klasor, path, YeniDosyaAdi,zaman;
            public int dosya_say;
            private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
            {
                kaynak_klasor = "C:\\Users\\alk4bu\\Desktop\\kaynak";
                hedef_klasor = "C:\\Users\\alk4bu\\Desktop\\hedef";
    
              
                 string[] dosyalar = System.IO.Directory.GetFiles(kaynak_klasor);
                    string dosya_adi;
                    foreach (string eleman in dosyalar)
          
                {
    
                        dosya_adi = System.IO.Path.GetFileName(eleman);
    
                    
                        path = kaynak_klasor + "\\" + dosya_adi;
                      
                  
                        dateTimePicker1.Format = DateTimePickerFormat.Custom;
                        dateTimePicker1.CustomFormat = "d:M:yyyy h:mm:ssss";
    
                        zaman = dateTimePicker1.Text.ToString();
                        zaman = zaman.Replace(".", "");
                        zaman = zaman.Replace(":", "");
                        zaman = zaman.Replace(" ", "");
                      
                        YeniDosyaAdi = hedef_klasor + "\\" + zaman +".dfq";
                    
                        File.Move(path, YeniDosyaAdi);
                    }
                
            }
        }
    }

    19 Eylül 2019 Perşembe 08:24

Yanıtlar

  •   zaman = dateTimePicker1.Text.ToString();

    ekrandaki kutuyu sürekli değiştirmediğiniz için problem oluyor. Zamanı direkt DateTime.Now ile alınız.


    www.cihanyakar.com


    • Düzenleyen Cihan YakarMVP 19 Eylül 2019 Perşembe 10:05
    • Yanıt Olarak İşaretleyen icemeno 19 Eylül 2019 Perşembe 10:34
    19 Eylül 2019 Perşembe 10:03
  • Abi Söylediğin değişiklikleri yaptım ve x86 için derledim.  Oldu şuan bilgisayarda sorunsuz çalışıyor.

    Bunun haricinde bekli faydalanmak isteyenler olursa diye yanlış yaptığım bir kaç şeyi daha düzelttim, onları da yazayım belki birine faydası olur. 

    İlk olarak filesystemwacher ın pathini değiştirmeyi unutmuşum onu değiştirdim.

    Sonrasında x86 olacak şekilde derledim. 

    Programı denemek için atölyeye gtitiğim de şu hatayı aldım. 

    Aklıma ilk olarak gelen şey Framework uyumsuzluğu oldu, sonrasında hemen toparladım ve ölçüm sonuçları yazılmadan yani işlem bitmeden dosyayı taşımaya çalışıyor olabileceğim aklıma geldi. 

    using System.Threading;

    ekledikten sonra

    private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e) {

    Thread.Sleep(2000);

    ekledim.

    Sorunsuz çalışıyor. Desteğiniz için tekrardan teşekkürler.

    Not: USB ile ilgili prosedur sadece Türkiye için değil Tüm Dünya da ki Lokasyonlarımız da uygulanan genel bir prosedür abi. Almanlar dahil.   :) 

    • Yanıt Olarak İşaretleyen icemeno 20 Eylül 2019 Cuma 15:03
    • Düzenleyen icemeno 20 Eylül 2019 Cuma 15:05
    20 Eylül 2019 Cuma 14:57

Tüm Yanıtlar

  • Kodu deneyemiyorum fakat şu şekilde dener misiniz?

    path = kaynak_klasor + "\\" + dosya_adi+".dfq"; 

    kaynak klasördeki dosya adının uzantısını ekleyin.


    Merak et, Araştır, Geliştir. Harun Yılmaz


    19 Eylül 2019 Perşembe 08:57
  • Kodu deneyemiyorum fakat şu şekilde dener misiniz?

    path = kaynak_klasor + "\\" + dosya_adi+".dfq"; 

    kaynak klasördeki dosya adının uzantısını ekleyin.


    Merak et, Araştır, Geliştir. Harun Yılmaz


    Olmadı ne yazık ki..
    19 Eylül 2019 Perşembe 09:24
  •   zaman = dateTimePicker1.Text.ToString();

    ekrandaki kutuyu sürekli değiştirmediğiniz için problem oluyor. Zamanı direkt DateTime.Now ile alınız.


    www.cihanyakar.com


    • Düzenleyen Cihan YakarMVP 19 Eylül 2019 Perşembe 10:05
    • Yanıt Olarak İşaretleyen icemeno 19 Eylül 2019 Perşembe 10:34
    19 Eylül 2019 Perşembe 10:03
  • Teşekkür ederim.Oldu..

    • Yanıt Olarak İşaretleyen icemeno 19 Eylül 2019 Perşembe 10:36
    • Yanıt İşaretini Geri Alan CetinBasozEditor 19 Eylül 2019 Perşembe 11:15
    19 Eylül 2019 Perşembe 10:35
  • DateTime.Now cozum. Benim eklemek istediğim, buradaki degeri metine cevrim sekliniz. O sekilde yaparsanız, en azından, siralanamaz bir sonuc elde edersiniz. Düzgunce bir sekilde yyyyMMddHHmmssfff formatıyla saklarsanız hem siralanabilir, hem de hangi zamanda saklandigini okumak ya da çevirmek daha kolay olur:

    string yeniDosyaAdi = Path.Combine(hedef_klasor, 
                    $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.dfq"); 

     


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    19 Eylül 2019 Perşembe 11:14
    Yanıtlayıcı
  • Merhaba Çetin Abi,

    Dosyalar özel dosyalar zaten abi. İçerisinde istediğimiz tüm bilgiler var.  

    Ne zaman, hangi operatör tarafından, hangi üretim makinesinde üretildi, ölçüm sonuçları vb.. tüm bilgiler var.  

    Bu dosyaları direkt olarak bu şekilde okumuyoruz zaten abi. Özel bir İstatistik yazılımı var onun veri tabanına kayıt ediliyor ve oradan dosya içeriğini okuyoruz.

    Bu dosyalar Almanya ya aktarılıp bir veri tabanına yazdırılıyor ve sonrasında muhtemelen siliniyor. Bu sebeple çok dikkat etmedim  ve  açıkçası senin gibi düşünemedim. 

    Fakat yine de söylediğini yapacağım ve doğrusu (mantıklısı) neyse o şekilde öğrenmeye gayret göstereceğim. 

    Tekrardan teşekkürler.

    Fakat şimdi de şöyle bir problemim var. 

    Bu kodun çalıştığı makine de iki adet işletim sistemi çalışıyor. Gerçek işletim sistemi Win7 bu işletim sistemi üzerine Sanal makine kurulu ve bunda da Win Xp çalışıyor. 

    Ölçümleri yaptığımız cihazın programında ( donanımında da olabilir bilmiyorum ) Win7 desteği yok.  

    Yukarıda yazdığımız kodu Win Xp de C:\  altında çalıştırıyoruz.  Ama program kendi bilgisayarım da çalışmasına rağmen , burada çalışmıyor. (Kendi bilgisayarım ve Ölçüm yapılan bilgisayardaki dosya yollarını değiştirip derliyorum )

    1) Öncelikle systemfilewatcher Win7 de mi işlem yapmaya çalışıyor acaba. 

    2) Hedef ve kaynak dosyayı tanımlarken farklı bir yol mu izlemem gerek acaba,

    Örneğin Win7 den  WinXp ye erişirken şöyle bir path izliyoruz.     10.20.10.115 \c:\windows........   gibi 

    Birde şimdi aklıma geldi. Resimdeki kısmı Systemfilewatcher ın özellikler kısmında path kısmını değiştirmeden derlemiş olabilirim?  (Bilmiyorum yarın işe gidince bakacağım. )

    Yada yapmam gereken başka bir şeyler var mı?

    Şimdiden teşekkürler...

    Resim temsilidir. İnternetten buldum.. 


    • Düzenleyen icemeno 19 Eylül 2019 Perşembe 14:23 Eksik bilgi vermişim.
    19 Eylül 2019 Perşembe 14:17
  • XP'de .Net destegi yoktu diye hatırlıyorum, var miydi?

    Not: Programinin tamami o yukarıda görünen ise , sonra boş vaktimde sana win32 exe yazarım (baska dilde).



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    19 Eylül 2019 Perşembe 14:26
    Yanıtlayıcı
  • Merhaba abi;

    Öncelikle ilgin ve desteğin için teşekkürler. Hakkını helal et. 

    WinXp nin Net. Desteği var mı bende bilmiyorum. Ama şöyle bir şey geldi başıma bugün. 

    Ölçüm yapılan bilgisayarda programı çalıştırmak için Exe ye çift tıkladığımda NetFrameWork versiyonunun uyumsuz olduğu ve bilgisayara uygun Net FrameWork versiyonunu indermem gerektiği uyarısını verdi.  Sonra bilgisayarda yüklü versiyona bakıp programı  uygun versiyonda tekrar yazdım. (Ben 4 yada 4.5 versiyon ile yazmıştım Win Xp de yanlış hatırlamıyorsam 3.03  gibi bir versiyon vardı)  Sorduğun soruya cevap olur inşallah.. 

    Yeni program yazmak istemişsin fakat IT partnerimiz güvenlik  sebebi ile dışarıdan yazılım çalıştırmama izin vermeyecektir ne yazık ki. ( Şu an Departman Müdürü seviyesinin altında kimsede USB port bile çalışmıyor.)

    Ama yine de çok teşekkürler abi.

    19 Eylül 2019 Perşembe 15:20
  • :) Cok akilli bu IT partnerleri (ben de gecen sene bırakana kadar system admin olarak calisiyordum - calistigim müşterilerde boyle akilli IT'ci her zaman cikiyor).

    Yukarıdaki kodunda, yeni .Net versiyonu gerektirecek bir şey göremedim aslinda. Projeni, ,.Net framework 2.0 ve x86 platformu olarak yeniden derle, sorun cikmamasi lazim.

      Not: Yukaridaki gereksiz usingleri de kodunda sag tiklayarak kaldır.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    19 Eylül 2019 Perşembe 15:24
    Yanıtlayıcı
  • Söylediklerini yarın deneyeceğim abi.

    Not: IT partnerin suçu yok abi :)  Biz bildirim açıyoruz onay Almanya Merkeze düşüyor. Çok sıkı bir sistem kurdular. 

    4-5 sene önce saatlik Administrator yetkisi bile alabiliyordum. Şimdi USB bile takıp çalıştıramıyorum ne yazık ki. Ama bir yandan iyi oldu. Bir sürü fuzuli işi bu sayede yapmıyorum :)

    19 Eylül 2019 Perşembe 17:45
  • Söylediklerini yarın deneyeceğim abi.

    Not: IT partnerin suçu yok abi :)  Biz bildirim açıyoruz onay Almanya Merkeze düşüyor. Çok sıkı bir sistem kurdular. 

    4-5 sene önce saatlik Administrator yetkisi bile alabiliyordum. Şimdi USB bile takıp çalıştıramıyorum ne yazık ki. Ama bir yandan iyi oldu. Bir sürü fuzuli işi bu sayede yapmıyorum :)

    :) Simdi kızdım iste, sanki Almanlar cok akilli da size guvenmiyorlar gibi olmuş. Siz katlanıyorsanız diyecek bir şey yok tabii.

     


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    19 Eylül 2019 Perşembe 22:20
    Yanıtlayıcı
  • Abi Söylediğin değişiklikleri yaptım ve x86 için derledim.  Oldu şuan bilgisayarda sorunsuz çalışıyor.

    Bunun haricinde bekli faydalanmak isteyenler olursa diye yanlış yaptığım bir kaç şeyi daha düzelttim, onları da yazayım belki birine faydası olur. 

    İlk olarak filesystemwacher ın pathini değiştirmeyi unutmuşum onu değiştirdim.

    Sonrasında x86 olacak şekilde derledim. 

    Programı denemek için atölyeye gtitiğim de şu hatayı aldım. 

    Aklıma ilk olarak gelen şey Framework uyumsuzluğu oldu, sonrasında hemen toparladım ve ölçüm sonuçları yazılmadan yani işlem bitmeden dosyayı taşımaya çalışıyor olabileceğim aklıma geldi. 

    using System.Threading;

    ekledikten sonra

    private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e) {

    Thread.Sleep(2000);

    ekledim.

    Sorunsuz çalışıyor. Desteğiniz için tekrardan teşekkürler.

    Not: USB ile ilgili prosedur sadece Türkiye için değil Tüm Dünya da ki Lokasyonlarımız da uygulanan genel bir prosedür abi. Almanlar dahil.   :) 

    • Yanıt Olarak İşaretleyen icemeno 20 Eylül 2019 Cuma 15:03
    • Düzenleyen icemeno 20 Eylül 2019 Cuma 15:05
    20 Eylül 2019 Cuma 14:57