windows下檔案存放最佳化

wangzh3發表於2006-04-27

在windows下,一個路徑下面的檔案或者資料夾個數應該不宜超過1000個,太多的話對系統效能有影響。

在彩鈴閘道器中,鈴音檔案的存放是根據鈴音檔案的所屬的類別根據一個計算公式計算出來的,這就意味著一個路徑下面可能會有非常多的檔案,儘管程式訪問的時候是透過ftp來獲取鈴音檔案的,但是仍然有問題,就是在ftp之前要去查詢鈴音檔案所屬的分類,然後根據公式計算ftp上的存放路徑,這樣子就對資料庫的壓力較大,所以從各方面效能考慮,改成根據鈴音檔名進行分路徑存放,這樣子相對簡單,所以寫如下perl程式進行轉換。

[@more@]

#!C:/Perl/bin/perl.exe -w
# name:adjust.pl
# func:將0~23路徑下的鈴音調整為根據12位鈴音id 4-3-3-2路徑下存放。
# author:
# 補充說明:放在鈴音ftp伺服器根路徑下,執行,最後生成新的路徑和檔案,原來的0~23路徑可以刪除或者備份,
# 做的時候需要考慮空間是否夠用,因為這樣子是double了鈴音檔案,所以空間佔用是原來的兩倍。
use strict;
use warnings;
use File::Path;
use File::Basename;
use File::Spec::Win32;
use File::Find;
use File::Copy;
use Cwd;

my $target=getcwd;


sub wanted{
if (-f $File::Find::name){
if ($File::Find::name=~/wav/){

my $FirstDir=$target."/".substr($_,0,4);
my $SecondDir=$FirstDir."/".substr($_,4,3);
my $ThirdDir=$SecondDir."/".substr($_,7,3);
my $FourthDir=$ThirdDir."/".substr($_,10,2);


if(! -e $FirstDir){
mkdir $FirstDir||die("error1");;
}

if (! -e $SecondDir){
mkdir $SecondDir||die("error2");;
}

if (! -e $ThirdDir){
mkdir $ThirdDir||die("error3");;
}

if (! -e $FourthDir){
mkdir $FourthDir||die("error4");;
}

my $filename=$_;

copy($File::Find::name,$FourthDir."/".$filename);
}
}
}

my @dirs=(0..23);
for my $dir(@dirs){
if (-e "$target/$dir"){
find(&wanted,"$target/$dir");
}
else{
print "$target/$dir does not existn";
}
}

print "it is ok now.n";

exit;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/47869/viewspace-830958/,如需轉載,請註明出處,否則將追究法律責任。

相關文章