예제 #1
0
        private void Extract(string path, string wildcard, ResourcesExtractorConfig config)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(path);

            FileInfo[] files = dirInfo.GetFiles(wildcard);

            foreach (FileInfo file in files)
            {
                if (stopProcess)
                {
                    return;
                }

                ExtractFilename(file.FullName, config);
            }

            if (config.ScanSubFolders)
            {
                DirectoryInfo[] dirs = dirInfo.GetDirectories();

                foreach (DirectoryInfo subdirInfo in dirs)
                {
                    if (stopProcess)
                    {
                        return;
                    }

                    Extract(subdirInfo.FullName, wildcard, config);
                }
            }
        }
예제 #2
0
        private void ExtractFilename(string filename, ResourcesExtractorConfig config)
        {
            if (OnExtractFilename != null)
            {
                OnExtractFilename(filename);
            }

            Assembly assembly = null;

            try
            {
                assembly = Assembly.LoadFile(filename);
            }
            catch
            {
            }

            if (assembly != null)
            {
                string[] names = assembly.GetManifestResourceNames();

                foreach (string name in names)
                {
                    int    bufferLen = 4096;
                    byte[] buffer    = new byte[bufferLen];
                    Stream stream    = assembly.GetManifestResourceStream(name);

                    string destFilename = Path.Combine(config.DestFolder, name);
                    String directory    = Path.GetDirectoryName(destFilename);
                    Directory.CreateDirectory(directory);

                    FileStream fileStream = new FileStream(destFilename, FileMode.Create, FileAccess.ReadWrite);


                    while (true)
                    {
                        int read = stream.Read(buffer, 0, bufferLen);

                        if (read > 0)
                        {
                            fileStream.Write(buffer, 0, read);
                        }
                        else
                        {
                            break;
                        }
                    }

                    fileStream.Close();
                    stream.Close();
                }
            }
        }
예제 #3
0
        public void ExtractThread(object data)
        {
            ResourcesExtractorConfig config = (ResourcesExtractorConfig)data;

            stopProcess = false;

            try
            {
                string wildcardOnly = Path.GetFileName(config.SourceWildcard);

                string path = config.SourceWildcard.Substring(0, config.SourceWildcard.LastIndexOf('\\'));

                Extract(path, wildcardOnly, config);
            }
            catch (Exception exception)
            {
                if (OnException != null)
                {
                    OnException(exception);
                }
            }

            OnExtractFinish();
        }
예제 #4
0
 public void Extract(ResourcesExtractorConfig config)
 {
     extractThread = new Thread(new ParameterizedThreadStart(ExtractThread));
     extractThread.Start(config);
 }