Welcome 微信登录

首页 / 脚本样式 / JavaScript / 使用jscript实现二进制读写脚本代码

因此,这里是一个很好的方式访问的二进制文件从JScript的。如果您要访问的这个对象从VBScript中,然后把它放在一个SWF文件。此对象已经被用于在愤怒将文件上载到Web服务,并已被证明是好的和快速的文件,在0-10 MB的地区。/** This is a fairly well optimized object which alows
访问的二进制文件从JScript的在Windows 
   *作业系统。  
   *该文件的末尾是小的一套测试,以显示它如何
   *用。您将需要adodb 2.5或更高版本。 
   *这将是使上最2000年机器和所有XP或更高
   *机器。 
   * 
   *版权:博士亚历山大j特纳-保留所有权利。 
   *请随时与使用此代码在任何您喜欢的方式
   *只要您一个参考的地方,在评论
   *我写的。
function BinaryFile(name)
{
    var adTypeBinary = 1 
    var adTypeText   = 2 
    var adSaveCreateOverWrite = 2
    // The trick - this is the "old fassioned" not translation page
    // It lest javascript use strings to act like raw octets
    var codePage="437";

    this.path=name;

    var forward  = new Array();
    var backward = new Array();

    // Note - for better performance I should preconvert these hex
    // definitions to decimal - at some point :-) - AJT
    forward["80"] = "00C7";
    forward["81"] = "00FC";
    forward["82"] = "00E9";
    forward["83"] = "00E2";
    forward["84"] = "00E4";
    forward["85"] = "00E0";
    forward["86"] = "00E5";
    forward["87"] = "00E7";
    forward["88"] = "00EA";
    forward["89"] = "00EB";
    forward["8A"] = "00E8";
    forward["8B"] = "00EF";
    forward["8C"] = "00EE";
    forward["8D"] = "00EC";
    forward["8E"] = "00C4";
    forward["8F"] = "00C5";
    forward["90"] = "00C9";
    forward["91"] = "00E6";
    forward["92"] = "00C6";
    forward["93"] = "00F4";
    forward["94"] = "00F6";
    forward["95"] = "00F2";
    forward["96"] = "00FB";
    forward["97"] = "00F9";
    forward["98"] = "00FF";
    forward["99"] = "00D6";
    forward["9A"] = "00DC";
    forward["9B"] = "00A2";
    forward["9C"] = "00A3";
    forward["9D"] = "00A5";
    forward["9E"] = "20A7";
    forward["9F"] = "0192";
    forward["A0"] = "00E1";
    forward["A1"] = "00ED";
    forward["A2"] = "00F3";
    forward["A3"] = "00FA";
    forward["A4"] = "00F1";
    forward["A5"] = "00D1";
    forward["A6"] = "00AA";
    forward["A7"] = "00BA";
    forward["A8"] = "00BF";
    forward["A9"] = "2310";
    forward["AA"] = "00AC";
    forward["AB"] = "00BD";
    forward["AC"] = "00BC";
    forward["AD"] = "00A1";
    forward["AE"] = "00AB";
    forward["AF"] = "00BB";
    forward["B0"] = "2591";
    forward["B1"] = "2592";
    forward["B2"] = "2593";
    forward["B3"] = "2502";
    forward["B4"] = "2524";
    forward["B5"] = "2561";
    forward["B6"] = "2562";
    forward["B7"] = "2556";
    forward["B8"] = "2555";
    forward["B9"] = "2563";
    forward["BA"] = "2551";
    forward["BB"] = "2557";
    forward["BC"] = "255D";
    forward["BD"] = "255C";
    forward["BE"] = "255B";
    forward["BF"] = "2510";
    forward["C0"] = "2514";
    forward["C1"] = "2534";
    forward["C2"] = "252C";
    forward["C3"] = "251C";
    forward["C4"] = "2500";
    forward["C5"] = "253C";
    forward["C6"] = "255E";
    forward["C7"] = "255F";
    forward["C8"] = "255A";
    forward["C9"] = "2554";
    forward["CA"] = "2569";
    forward["CB"] = "2566";
    forward["CC"] = "2560";
    forward["CD"] = "2550";
    forward["CE"] = "256C";
    forward["CF"] = "2567";
    forward["D0"] = "2568";
    forward["D1"] = "2564";
    forward["D2"] = "2565";
    forward["D3"] = "2559";
    forward["D4"] = "2558";
    forward["D5"] = "2552";
    forward["D6"] = "2553";
    forward["D7"] = "256B";
    forward["D8"] = "256A";
    forward["D9"] = "2518";
    forward["DA"] = "250C";
    forward["DB"] = "2588";
    forward["DC"] = "2584";
    forward["DD"] = "258C";
    forward["DE"] = "2590";
    forward["DF"] = "2580";
    forward["E0"] = "03B1";
    forward["E1"] = "00DF";
    forward["E2"] = "0393";
    forward["E3"] = "03C0";
    forward["E4"] = "03A3";
    forward["E5"] = "03C3";
    forward["E6"] = "00B5";
    forward["E7"] = "03C4";
    forward["E8"] = "03A6";
    forward["E9"] = "0398";
    forward["EA"] = "03A9";
    forward["EB"] = "03B4";
    forward["EC"] = "221E";
    forward["ED"] = "03C6";
    forward["EE"] = "03B5";
    forward["EF"] = "2229";
    forward["F0"] = "2261";
    forward["F1"] = "00B1";
    forward["F2"] = "2265";
    forward["F3"] = "2264";
    forward["F4"] = "2320";
    forward["F5"] = "2321";
    forward["F6"] = "00F7";
    forward["F7"] = "2248";
    forward["F8"] = "00B0";
    forward["F9"] = "2219";
    forward["FA"] = "00B7";
    forward["FB"] = "221A";
    forward["FC"] = "207F";
    forward["FD"] = "00B2";
    forward["FE"] = "25A0";
    forward["FF"] = "00A0";
    backward["C7"]   = "80";
    backward["FC"]   = "81";
    backward["E9"]   = "82";
    backward["E2"]   = "83";
    backward["E4"]   = "84";
    backward["E0"]   = "85";
    backward["E5"]   = "86";
    backward["E7"]   = "87";
    backward["EA"]   = "88";
    backward["EB"]   = "89";
    backward["E8"]   = "8A";
    backward["EF"]   = "8B";
    backward["EE"]   = "8C";
    backward["EC"]   = "8D";
    backward["C4"]   = "8E";
    backward["C5"]   = "8F";
    backward["C9"]   = "90";
    backward["E6"]   = "91";
    backward["C6"]   = "92";
    backward["F4"]   = "93";
    backward["F6"]   = "94";
    backward["F2"]   = "95";
    backward["FB"]   = "96";
    backward["F9"]   = "97";
    backward["FF"]   = "98";
    backward["D6"]   = "99";
    backward["DC"]   = "9A";
    backward["A2"]   = "9B";
    backward["A3"]   = "9C";
    backward["A5"]   = "9D";
    backward["20A7"] = "9E";
    backward["192"]  = "9F";
    backward["E1"]   = "A0";
    backward["ED"]   = "A1";
    backward["F3"]   = "A2";
    backward["FA"]   = "A3";
    backward["F1"]   = "A4";
    backward["D1"]   = "A5";
    backward["AA"]   = "A6";
    backward["BA"]   = "A7";
    backward["BF"]   = "A8";
    backward["2310"] = "A9";
    backward["AC"]   = "AA";
    backward["BD"]   = "AB";
    backward["BC"]   = "AC";
    backward["A1"]   = "AD";
    backward["AB"]   = "AE";
    backward["BB"]   = "AF";
    backward["2591"] = "B0";
    backward["2592"] = "B1";
    backward["2593"] = "B2";
    backward["2502"] = "B3";
    backward["2524"] = "B4";
    backward["2561"] = "B5";
    backward["2562"] = "B6";
    backward["2556"] = "B7";
    backward["2555"] = "B8";
    backward["2563"] = "B9";
    backward["2551"] = "BA";
    backward["2557"] = "BB";
    backward["255D"] = "BC";
    backward["255C"] = "BD";
    backward["255B"] = "BE";
    backward["2510"] = "BF";
    backward["2514"] = "C0";
    backward["2534"] = "C1";
    backward["252C"] = "C2";
    backward["251C"] = "C3";          
    backward["2500"] = "C4";
    backward["253C"] = "C5";
    backward["255E"] = "C6";
    backward["255F"] = "C7";
    backward["255A"] = "C8";
    backward["2554"] = "C9";
    backward["2569"] = "CA";
    backward["2566"] = "CB";
    backward["2560"] = "CC";
    backward["2550"] = "CD";
    backward["256C"] = "CE";
    backward["2567"] = "CF";
    backward["2568"] = "D0";
    backward["2564"] = "D1";
    backward["2565"] = "D2";
    backward["2559"] = "D3";
    backward["2558"] = "D4";
    backward["2552"] = "D5";
    backward["2553"] = "D6";
    backward["256B"] = "D7";
    backward["256A"] = "D8";
    backward["2518"] = "D9";
    backward["250C"] = "DA";
    backward["2588"] = "DB";
    backward["2584"] = "DC";
    backward["258C"] = "DD";
    backward["2590"] = "DE";
    backward["2580"] = "DF";
    backward["3B1"]  = "E0";
    backward["DF"]   = "E1";
    backward["393"]  = "E2";
    backward["3C0"]  = "E3";
    backward["3A3"]  = "E4";
    backward["3C3"]  = "E5";
    backward["B5"]   = "E6";
    backward["3C4"]  = "E7";
    backward["3A6"]  = "E8";
    backward["398"]  = "E9";
    backward["3A9"]  = "EA";
    backward["3B4"]  = "EB";                                                              
    backward["221E"] = "EC";
    backward["3C6"]  = "ED";
    backward["3B5"]  = "EE";
    backward["2229"] = "EF";
    backward["2261"] = "F0";
    backward["B1"]   = "F1";
    backward["2265"] = "F2";
    backward["2264"] = "F3";
    backward["2320"] = "F4";
    backward["2321"] = "F5";
    backward["F7"]   = "F6";
    backward["2248"] = "F7";
    backward["B0"]   = "F8";
    backward["2219"] = "F9";
    backward["B7"]   = "FA";
    backward["221A"] = "FB";
    backward["207F"] = "FC";
    backward["B2"]   = "FD";
    backward["25A0"] = "FE";
    backward["A0"]   = "FF";     

    var hD="0123456789ABCDEF";
    this.d2h = function(d)
    {
        var h = hD.substr(d&15,1);
        while(d>15) {d>>=4;h=hD.substr(d&15,1)+h;}
        return h;
    }

    this.h2d = function(h)
    {
        return parseInt(h,16);
    }

    this.WriteAll = function(what)
    {
        //Create Stream object
        var BinaryStream = WScript.CreateObject("ADODB.Stream");
        //Specify stream type - we cheat and get string but "like" binary
        BinaryStream.Type = adTypeText;
        BinaryStream.CharSet = "437";         
        //Open the stream
        BinaryStream.Open();
        // Write to the stream
        BinaryStream.WriteText(this.Forward437(what));
        // Write the string to the disk
        BinaryStream.SaveToFile(this.path, adSaveCreateOverWrite);

        // Clearn up
        BinaryStream.Close();
    }

    this.ReadAll  = function()
    {
        //Create Stream object - needs ADO 2.5 or heigher
        var BinaryStream = WScript.CreateObject("ADODB.Stream")
        //Specify stream type - we cheat and get string but "like" binary
        BinaryStream.Type = adTypeText;
        BinaryStream.CharSet = codePage;
        //Open the stream
        BinaryStream.Open();
        //Load the file data from disk To stream object
        BinaryStream.LoadFromFile(this.path);
        //Open the stream And get binary "string" from the object
        var what = BinaryStream.ReadText;
        // Clean up
        BinaryStream.Close();
        return this.Backward437(what);
    }

    /* Convert a octet number to a code page 437 char code */
    this.Forward437 = function(inString)
    {
        var encArray = new Array();
        var tmp="";
        var i=0;
        var c=0;
        var l=inString.length;
        var cc;
        var h;
        for(;i<l;++i)
        {
            c++;
            if(c==128)
            {
                encArray.push(tmp);
                tmp="";
                c=0;
            }
            cc=inString.charCodeAt(i);
            if(cc<128)
            {
                tmp+=String.fromCharCode(cc);
            }      
            else
            {
                h=this.d2h(cc);
                h=forward[""+h];
                tmp+=String.fromCharCode(this.h2d(h));
            }
        }
        if(tmp!="")
        {
            encArray.push(tmp);
        }

        // this loop progressive concatonates the
        // array elements entil there is only one
        var ar2=new Array();
        for(;encArray.length>1;)
        {
            var l=encArray.length;
            for(var c=0;c<l;c+=2)
            {
                if(c+1==l)
                {
                    ar2.push(encArray[c]);
                }
                else
                {
                    ar2.push(""+encArray[c]+encArray[c+1]);
                }
            }
            encArray=ar2;
            ar2=new Array();
        }
        return encArray[0];
    }
    /* Convert a code page 437 char code to a octet number*/
    this.Backward437 = function(inString)
    {
        var encArray = new Array();
        var tmp="";
        var i=0;
        var c=0;
        var l=inString.length;
        var cc;
        var h;
        for(;i<l;++i)
        {
            c++;
            if(c==128)
            {
                encArray.push(tmp);
                tmp="";
                c=0;
            }
            cc=inString.charCodeAt(i);
            if(cc<128)
            {
                tmp+=String.fromCharCode(cc);
            }
            else
            {
                h=this.d2h(cc);
                h=backward[""+h];
                tmp+=String.fromCharCode(this.h2d(h));
            }
        }
        if(tmp!="")
        {
            encArray.push(tmp);
        }

        // this loop progressive concatonates the
        // array elements entil there is only one
        var ar2=new Array();
        for(;encArray.length>1;)
        {
            var l=encArray.length;
            for(var c=0;c<l;c+=2)
            {
                if(c+1==l)
                {
                    ar2.push(encArray[c]);
                }
                else
                {
                    ar2.push(""+encArray[c]+encArray[c+1]);
                }
            }
            encArray=ar2;
            ar2=new Array();
        }
        return encArray[0];
    }

}

// 使用方法:
/*
var bf0=new BinaryFile();
var crFolder = "C:/Temp/cr"
var bf1=new BinaryFile(crFolder+"/PCDV0026.JPG");
var bf2=new BinaryFile(crFolder+"/PCDV0026_.JPG");
bf2.WriteAll(bf1.ReadAll());
*/