Bir süredir işyerinde bazı dosyaları yedeklemek için kullanabileceğim küçük bir yedekleme projesi üzerinde çalışıyorum. Hafta sonu yakaladığım bir kaç saatlik serbest zamanda yedekleme esnasında karşılaşılan aynı dosyanın farklı düzenlemeleri için bir çözüm arıyordum.
Sonunda aynı isimli dosyalar için ismin sonuna bir dosya sıra numarası eklemeye karar verdim. İtiraf edeyim başlangıçta gözüme çok basit gibi görünmüştü. Ancak işin içine girdikçe bir çok detayla yüzleşmek zorunda kaldım. Neticede ortaya aşağıdaki kodlar çıktı. Her türlü eleştiri ve iyileştirmeye açık durumdalar :) Ayrıca bu konuda farklı fikirleriniz varsa duymak isterim.
DPaste : https://dpaste.dzfl.pl/7e5069730616
import std.stdio;
import std.string;
import std.file;
import std.path;
import std.conv;
void main()
{
int i = 0;
while (i < 15)
{
string kaynak = "/home/zafer/Pictures/logo.png";
string hedef = "/media/depo/test/logo.png";
string isim = dosyaIsimlendir(hedef);
writeln("Yeni dosya adi: " ~ isim);
copy(kaynak, isim);
i++;
}
}
string dosyaIsimlendir(string dosya)
{
if (!exists(dosya))
{
return dosya;
}
else
{
string uzanti = extension(dosya);
string dosyaAdi = stripExtension(dosya);
// logo veya logo(2)
if (indexOf(dosyaAdi, '(') == -1)
{
dosyaAdi = dosyaAdi ~ "(1)" ~ uzanti;
}
else
{
int ilk = cast(int) indexOf(dosyaAdi, '(') +1;
int son = cast(int) indexOf(dosyaAdi, ')');
string numara = dosyaAdi[ilk..son];
dosyaAdi = dosyaAdi[0..ilk-1] ~ "("~ to!string(to!int(numara) + 1) ~")" ~ uzanti;
}
return dosyaIsimlendir(dosyaAdi);
}
}
unittest
{
mkdir("/tmp/test");
string dosya = dosyaIsimlendir("/tmp/test/dosya.txt");
assert(dosya == "/tmp/test/dosya.txt");
// Hedef klasörde aynı isimde bir dosya oluşturalım.
std.file.write("/tmp/test/dosya.txt", "test");
// Hedef dosya yeniden isimlendirilmeli?
dosya = dosyaIsimlendir("/tmp/test/dosya.txt");
assert(dosya == "/tmp/test/dosya(1).txt");
// Çevremizi temiz bırakalım :)
std.file.remove("/tmp/test/dosya.txt");
rmdir(DirEntry("/tmp/test"));
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply