3 tane wav dosyayı 1 dosya içine yığmak ve burdan okutmak!
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
BlockRead ve BlockWrite komutlarını açıklamam istenmiş.
Emriniz başım üstüne
Kod yazmayıp yol göstermek istiyorum. Adım adım yapmanız gerekenleri yazayım;
1- Biri dosyalarınızın toplam boyutunda (adına toplam diyelim), diğeri en büyük dosyanızın boyutunda (bunun adı da gecici olsun) olmak üzere 2 adet byte dizisi oluşturun.
2- Toplam dizisine en büyük boyutlu dosyanızın baytlarını yazın (BlockRead ile)
3- gecici dizisine 2. dosyanızı doldurun (yine blockread ile).
4- Bir döngü ile, gecici dizisindeki baytları, ilk dosyanın bittiği yerden itibaren toplam dizisine yazın
5-gecici dizisine 3. dosyanızı doldurun
6- Bir döngü ile, gecici dizisinin baytlarını, toplam dizisinin kalan kısmına yazın
7- Toplam dizisini BlockWrite komutu ile bir dosyaya kaydedin.
Buna benzer bir şekilde, dosyayı tekrar 3'e bölebilirsiniz.
Kod yazmadığım için kusura bakmayın, ama acemilere en iyi yardım bu şekilde yapılıyor
Cevap yazmakta geciktiğim için de özür diliyorum, sadece cuma cumartesi pazar akşamları internete girebiliyorum.
Son olarak, lütfen bana hocam demeyin. Çünkü tahmin edebileceğiniz en küçük yaştayım
Emriniz başım üstüne
Kod yazmayıp yol göstermek istiyorum. Adım adım yapmanız gerekenleri yazayım;
1- Biri dosyalarınızın toplam boyutunda (adına toplam diyelim), diğeri en büyük dosyanızın boyutunda (bunun adı da gecici olsun) olmak üzere 2 adet byte dizisi oluşturun.
2- Toplam dizisine en büyük boyutlu dosyanızın baytlarını yazın (BlockRead ile)
3- gecici dizisine 2. dosyanızı doldurun (yine blockread ile).
4- Bir döngü ile, gecici dizisindeki baytları, ilk dosyanın bittiği yerden itibaren toplam dizisine yazın
5-gecici dizisine 3. dosyanızı doldurun
6- Bir döngü ile, gecici dizisinin baytlarını, toplam dizisinin kalan kısmına yazın
7- Toplam dizisini BlockWrite komutu ile bir dosyaya kaydedin.
Buna benzer bir şekilde, dosyayı tekrar 3'e bölebilirsiniz.
Kod yazmadığım için kusura bakmayın, ama acemilere en iyi yardım bu şekilde yapılıyor
Cevap yazmakta geciktiğim için de özür diliyorum, sadece cuma cumartesi pazar akşamları internete girebiliyorum.
Son olarak, lütfen bana hocam demeyin. Çünkü tahmin edebileceğiniz en küçük yaştayım
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Kod: Tümünü seç
procedure SplitFile(FileName:tFileName;DosyaBilgileri:TStringList);
var
fs, ss: TFileStream;
cnt : integer;
SplitName: String;
begin
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) ;
try
for cnt:=0 to DosyaBilgileri.Count - 1 do
begin
SplitName := ChangeFileExt(FileName, Format('%s%d', ['._',cnt])) ;
ss := TFileStream.Create(SplitName, fmCreate or fmShareExclusive) ;
try
ss.CopyFrom(fs, strtoint(DosyaBilgileri[cnt]));
finally
ss.Free;
end;
end;
finally
fs.Free;
end;
end;
bu procedur wawların tumunun icinde bulundugu dosyanin yolunu ve vaw dosyalarinin boyut bilgilerini iceren stringlist tipindeki bir degisken alir. sonuc olarakta dosyadaki butun wav lari birlesmis._0, birlesmis._1 seklinde disari atar.
Kod: Tümünü seç
function CombineFiles(Files:Array Of TFileName;CombinedFileName : TFileName;DosyaBilgileri:TStringList) : Boolean;
var
cnt:integer;
i: integer;
fs, sStream: TFileStream;
filenameOrg: String;
// OncekiKonum:int64;
begin
i := 1;
// OncekiKonum :=0;
fs := TFileStream.Create(CombinedFileName, fmCreate or fmShareExclusive);
try
for cnt:=low(Files) to high(Files) do
begin
if FileExists(Files[cnt]) then
begin
sStream := TFileStream.Create(Files[cnt], fmOpenRead or fmShareDenyWrite);
DosyaBilgileri.Add(inttostr(sStream.Size));
// OncekiKonum := OncekiKonum + sStream.Size;
try
fs.CopyFrom(sStream, 0);
finally
sStream.Free;
end;
Inc(i);
// fs.Position :=OncekiKonum;
Files[cnt] := ChangeFileExt(Files[cnt], '.'+ FormatFloat('000', i));
end;
end;
finally
fs.Free;
end;
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
Dosyalar:array [0..1] of TFileName;
begin
DosyaBilgileri.Clear;
Dosyalar[0] := 'a.txt';
Dosyalar[1] := 'b.txt';
CombineFiles(Dosyalar,'birlesmis.txt',DosyaBilgileri);
DosyaBilgileri.SaveToFile('info.txt');
end;
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
begin
DosyaBilgileri.LoadFromFile('info.txt');
SplitFile('birlesmis.txt',DosyaBilgileri);
end;
dosyabilgilerini de birlesmis.txt dosyasinda ya da direkt exenin içerisinde tutmak mumkun tabi...
- sertkayasalih
- Üye
- Mesajlar: 178
- Kayıt: 12 Haz 2003 12:47
- Konum: Antalya
- İletişim:
Merhaba,
BlockRead ve BlockWrite ile ilgili sıkıntımı lütfen emir olarak değerlendirmeyin!
@ulu coder tekrar bilgilerini paylaştığın için teşekkür ederim
@sadettinpolat,
- Açılamalı yazdığınız bu kodlar işimi kolaylaştıracak.
Allah da sizin işlerinizi kolaylaştırsın!
Tekrar yardımcı olan herkese çok teşekkür ederim
ulu coder yazdı:BlockRead ve BlockWrite komutlarını açıklamam istenmiş.
Emriniz başım üstüne
BlockRead ve BlockWrite ile ilgili sıkıntımı lütfen emir olarak değerlendirmeyin!
- Bilgi seviyesi benden yüksek olup bana yol gösteren herkes, fiziksel yaşı ne olursa olsun, benim için bir öğretmen ve hocadır.ulu coder yazdı:Son olarak, lütfen bana hocam demeyin. Çünkü tahmin edebileceğiniz en küçük yaştayım
@ulu coder tekrar bilgilerini paylaştığın için teşekkür ederim
@sadettinpolat,
- Açılamalı yazdığınız bu kodlar işimi kolaylaştıracak.
Allah da sizin işlerinizi kolaylaştırsın!
Tekrar yardımcı olan herkese çok teşekkür ederim
Bilgi; iki tarafı keskin kılıca benzer.
İyi kullanılmazsa, ya karşıyı, ya da sahibini keser.
İyi kullanılmazsa, ya karşıyı, ya da sahibini keser.
- sertkayasalih
- Üye
- Mesajlar: 178
- Kayıt: 12 Haz 2003 12:47
- Konum: Antalya
- İletişim:
- Hocam haklısınız. Toplam 1400 adet wav dosyası var.bk yazdı: kaç tane wav dosyası kullanacaksınız eğer bu sayı fazlaysa tek dosyaya birleştirimiş wav'ları çıkarmak da gecikmeye sebep olur.
- Veritabanında söylediğiniz gibi yapılması mümkün. Programın, OnCreate olayında hepsini Temp klasörüne gönderip(export) ordan kullanıp, işlem bitince de hepsini silmek. Böylece gecikme de ortadan kalkar.
Hocam, kaygılarımı biraz daha açayım.
- Bir yıla yakın emek verdiğim bu wav dosyalarımı paketleme üzerinde durmamın sebebi şu; başkalarının bu wav dosyalarına ulaşmalarını engelleyebilmek.
Veritabanı yöntemi kullanırsak, OnCreate olayında Temp klasörüne export edilen wav dosyaları yine açıkta kalacak!
Temp klasörünü veya wav dosyalarını gizlemenin(Hidden) dışında daha güvenli bir yol nasıl bulabilirim?
Tekrar yardımlarınız için çok teşekkür ederim
Bilgi; iki tarafı keskin kılıca benzer.
İyi kullanılmazsa, ya karşıyı, ya da sahibini keser.
İyi kullanılmazsa, ya karşıyı, ya da sahibini keser.