Windowsun dosya yazma isini agirdan almasi

Başlatan z, 06 Kasım 2014, 01:41:46

z

Delphide gelistirdigim bir program SD karta bir dosya yaziyor ve ekranda "Islem Tamam" mesaji veriyor.

Bende bu mesaji gorunce SD karti cikartiyorum. Biraz sonra windows gecikmeli yazma islemi var erken cikarttiniz gibi hata veriyor. Halbuki en az 1 sn beklemisim.

Neyse;

Delphi program Islem Tamam mesaji vermeden once dosyanin gercekten yazilip yazilmadigini test etsin ardindan islem tamam mesaji versin istiyorum.

Nasil bir cozum gerekiyor?

(OS: XP)

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mir_as82

Hocam az buçuk C bilgim var. Buna galiba flush işlemi deniyor. Eğer delphinin flush işlemi tamamlandi mi tamamlanmadi mi diye windows un api lerini kullanip size geri döndürecek bir araci varsa onu deneyebilirsiniz.

M.Salim GÜLLÜCE

Aygıtı çıkar seçeneğini denersen garanti olur.
Aygıt meşgul cevabını alırsın.
meşguliyet bittiğinde zaten aygıtı ayırmış olursun.

t2

format türünü değiştirmek işe yarayabilir. Fat,FaT32,ntfs,exFAT

diot

Aygıt yöneticisinde , disk sürücülerin altındaki disk sürücünüzü bulup , sağ tuş özellikler ve ardından ilkeler e tıklayıp. önbelleğe yazma ilkesindeki , aygıta yazma önbelleğini (cache) kapatın. Bu durumda uygulamanız direkt diske yazmaya başlayacaktır. Umarım bu şekilde sorununuz çözülür.

z

#5
Format turunu degistiremem. (Zormat bana ozel)

mesaj birleştirme:: 06 Kasım 2014, 09:32:34

@Diot

Bu islemi programa nasil yaptiririm?

Cunku program her hangi bir kisiye verilecek. O kisiden bu tur islemler yapmasini istemem.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

diot

#6
registry den ilgili anahtarı değiştirmeniz lazım ama hangi anahtar bunu şu an bilmiyorum.


mesaj birleştirme:: 06 Kasım 2014, 09:42:44

HKLM\System\CurrentControlSet\Enum\IDE\<yourDiskName>\<serial no>\Device
Parameters\Disk\UserWriteCacheSetting = 0x0

0x0 = disable and 0x00000001 = enabled. It is a REG_DWORD.

olması lazım bir kontrol et istersen

mir_as82

Hocam son yazdığın bilgiyi yazıp yazmadığını kontrol etsen? Yani sonuçta ramden sd karta yazıyorsun. SD kartta dosyanın sonuna gitsen ve file pointerini okusan. Sonuçta sd karta yazacağın verilerin senin ram in de ve sen onları dosyaya yazıyorsun. File pointer ve veri karşılaştırması sorunu çözer mi acaba?

z

Registryde degisiklik yapmadim. Buna her makine yetki vermeyebilir.

Sorunum hala devam ediyor.

64 K uzunlugunda dosya SD karta yazildi mesaji verdigimde SD kartta 64 K dosyami goruyorum.

65536. kayita git dedigimde gidiyor da.

Isletim sisteminde debug ile icine girip geziyorum her sey ok.

Fakat SD karti sokmeye kalktigimda gecikmeli yazma islemi hatasi aliyorum.

Isin kotusu bu hata SD kartin MBR unda check disk yapilmali bitinin set olmasina neden oluyor bu da uygulamamda hataya neden oluyor.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mir_as82

Hocam işletim sistemi ile kullandığınız dll arasında bir iletişimsizlikten kaynaklı olabilir mi. Yani yazdıktan sonra yapılması gerekli bir close işlemi vb.. Kullandığınız dll in manueline bakmak gerekiyordur belki.

diot

Yukarıdada belirtmiştim. HDD cache aktif iken bu sorunlar devam edecektir. 2. bir yöntemden bahsedeyim. windows'a usb porta bağlı cihazı güvenli kaldırma istegi yollayın.

z

#11
DLL falan kullanmiyorum. SD kart isletim sistemi tarafindan depolama elemani olarak goruluyor zaten.

Dosyayi klasik fileopen filewrite komutlari olusturuyorum.

Isletim sisteminde tanimlamalara mudahale etmek istemiyorum. Bu benim isimi gorur ama yazdigim programi musterilerime donanim ile birlikte verecegim ve bu programi gunluk kullanacaklari PC'ye yukleyecekler.

Adamlara registryde ayarlamalari soyle soyle yapin diyemem. Desem de bazi makineler admin passwordu ile korunuyor. En nefret ettigim is, adminle muhatap olmak.

Bu yuzden @Diot bu cozume sicak bakmiyorum.

Benim istedigim su;

Programim yazma islemini yaptiktan sonra isterse 1dk beklesin onemli değil. Yeterki SD karti alabilirsiniz dediginde gecikmeli yazma hatasi ile karsilasmayayim.

Mevcut durumda dosyayi SD kartta olusturuyor ve dosyayi kapatiyorum. Okuma amacli aciyor ve dosya sonunda seek ediyorum. Baktim hatasiz seek de ediyor ediyor SD kartta dosyaniz hazir diye kullaniciya mesaj veriyorum.

Mesaji gorunce SD karti yuvasindan cikartiyorum biraz sonra windows kucuk bir pencerede gecikmeli yazma isleminde hata oldu diyor.

-----------

Eger eject etme isini yazilima yaptirabilirsem sorun kalkacak zira program SD karta dosyaniz hazir dediginde isletim sisteminde mouse ile SD karti eject et dersem bu sorun olusmuyor.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

MC_Skywalker

sisteminizdeki Antivirus programı da SD kartı bırakmıyor olabilir.  Antivurslerdeki On Access scan kısmı harici medyanın takılıp/takılmadığını ve Dosya okuma/yazma işlemini kontrol ediyor. Ve normalde windowsun işi bitmişken Antivirus programı yüzünde bekleme yapmanız gerekiyor.


diot

#13
Bu durumda NT kernelindeki dosya yazma ve okuma fonksiyonlarını kullanmayıp ASM biliyorsanız . Bios dan destekli INT13H ve DOS çekirdek destekli INT21H kullanarak yazma ve okuma rutinlerini kendiniz yazacaksınız. Şu an aklıma başka bir çözümde gelmiyor. Fakat sd kartı bios altından göreceği konusunda şüphelerim var.



MC_Skywalker

SD kartı yeni nesil kartlarda görebilir zira butür medyalarda boot eyme seçenği var bazı bioslarda