「已注销」 2017-09-29 07:52 采纳率: 0%
浏览 3983
已采纳

C#写了一个转换kgtemp酷狗缓存文件的窗体程序,各位有兴趣的可以看看.

解决方案链接:http://pan.baidu.com/s/1hsH2bRY
源码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1//作者:小星星 QQ:2651016568 QQEmily:2651016568@qq.com
{
public partial class Form1 : Form
{
private string extension;
private string path;
private string paths = "G:\转译文件";

    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.All;//设置拖动操作
    }
    private void TextBox1_TextChanged(object sender, EventArgs e)
    {
        paths = textBox1.Text;//输入保存路径给paths
    }
    private void Form1_DragDrop(object sender, DragEventArgs e)
    {
        path = (((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString());//获取拖动的文件路径
        extension = Path.GetExtension(path);//获取指定路径的文件扩展名
        if (Directory.Exists(path))//如果是文件夹
        {
            DirectoryInfo dinfo = new DirectoryInfo(path);//实例化一个DirectoryInfo对象
            foreach (FileSystemInfo f in dinfo.GetDirectories())//获取子目录
            {
                if (f is DirectoryInfo)//如果是文件夹
                {
                    MessageBox.Show(f.Name);//显示子目录名称
                }
            }
            foreach (FileInfo fs in dinfo.GetFiles("*.kgtemp")) //查找.kgtemp文件
            {
                byte[] key = { 0xAC, 0xEC, 0xDF, 0x57 };
                using (var input = new FileStream(path + '\\' + fs.Name, FileMode.Open, FileAccess.Read))//kgtemp文件的完整路径,两条斜杠是为了避免转义字符
                {
                    string fss = System.Text.RegularExpressions.Regex.Replace(fs.Name, "[.kgtemp]", "");//去掉.kgtemp后缀名后赋值给fss
                    if (!Directory.Exists(paths))//如果没有该目录,    如果电脑没有G盘修改这里和输出文件那一行,改变保存路径
                    {
                        Directory.CreateDirectory(paths);//创建目录
                    }
                    var output = File.OpenWrite(paths + "\\" + fss + ".mp3");//输出文件:目录+去掉后缀名的文件名+.MP3后缀名
                    input.Seek(1024, SeekOrigin.Begin);//开始读取kgtemp文件,先跳过1024字节包头
                    byte[] buffer = new byte[key.Length];
                    int length;
                    while ((length = input.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        for (int i = 0; i < length; i++)
                        {
                            var k = key[i];
                            var kh = k >> 4;
                            var kl = k & 0xf;
                            var b = buffer[i];
                            var low = b & 0xf ^ kl;//解密后的低4位
                            var high = (b >> 4) ^ kh ^ low & 0xf;//解密后的高4位
                            buffer[i] = (byte)(high << 4 | low);
                        }
                        output.Write(buffer, 0, length);//转译方面代码来源:http://www.cnblogs.com/KMBlog/p/6877752.html 作者:孤心浪子
                    }
                    output.Close();
                }
            }MessageBox.Show("完成");//原先程序没有这句,360软件就报毒,不知道什么原因,也懒得试了.垃圾360
        }
        else
        {
            if (string.Equals(extension, ".kgtemp", StringComparison.CurrentCultureIgnoreCase))//如果后缀名是.kgtemp(不区分大小写的)
            {
                byte[] key = { 0xAC, 0xEC, 0xDF, 0x57 };
                using (var input = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    string fz = path.Substring(path.LastIndexOf("\\") + 1);
                    //获取路径中的文件名(带后缀的) ,fz的值为 “----.kgtemp”
                    string fss = System.Text.RegularExpressions.Regex.Replace(fz, "[.kgtemp]", "");//去掉.kgtemp后缀名后赋值给fss
                    if (!Directory.Exists(paths))//如果没有该目录,    如果电脑没有G盘修改这里和输出文件那一行,改变保存路径
                    {
                        Directory.CreateDirectory(paths);//创建目录
                    }
                    var output = File.OpenWrite(paths + "\\" + fz + ".mp3");//输出文件
                    input.Seek(1024, SeekOrigin.Begin);//跳过1024字节的包头
                    byte[] buffer = new byte[key.Length];
                    int length;
                    while ((length = input.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        for (int i = 0; i < length; i++)
                        {
                            var k = key[i];
                            var kh = k >> 4;
                            var kl = k & 0xf;
                            var b = buffer[i];
                            var low = b & 0xf ^ kl;//解密后的低4位
                            var high = (b >> 4) ^ kh ^ low & 0xf;//解密后的高4位
                            buffer[i] = (byte)(high << 4 | low);
                        }
                        output.Write(buffer, 0, length);
                    }
                    output.Close();
                }
            }
            else
            {
                MessageBox.Show(extension, "无效后缀名");
            }
        }
    }

}

}
请教大神了

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-09-29 16:02
    关注

    报毒是什么意思?杀毒软件报告有病毒?那是误报,什么杀毒软件误报,你要和对应的杀毒软件开发者联系

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 recipe通过gem协议传的是什么
  • ¥15 TS2307: Cannot find module 'cc'.
  • ¥15 100小时学会sap 书上pp章节5.22,标准成本计算逻辑?
  • ¥50 达梦数据库误删日志文件重做DAMENG01.log启动仍然-712错误
  • ¥15 cellranger化学处理类型报错
  • ¥15 用texstudio插入图片出现下面情况,怎么办
  • ¥15 ubantu 用samba挂载windows的共享文件夹,无法挂载二级目录和修改文件
  • ¥15 有没有会五轴RTCP算法,双转台AC结构。
  • ¥25 对于LSTM实践问题的疑问
  • ¥15 PHP中关于排名和显示的问题