小编Dan*_*est的帖子

我如何获得单个文件大小?

这是方法:

private void Compressions(string zipFile,string sources)
        {
            try
            {
                string zipFileName = zipFile;
                string source = sources;
                string output = @"c:\temp";
                string programFilesX86 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86) + "\\Diagnostic Tool\\7z.dll";
                if (File.Exists(programFilesX86))
                {
                    SevenZipExtractor.SetLibraryPath(programFilesX86);
                }
                else
                {
                    string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\7z.dll";
                    SevenZipExtractor.SetLibraryPath(path);
                }
                string programFiles = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + "\\Diagnostic Tool\\7z.dll";
                if (File.Exists(programFiles))
                {
                    SevenZipExtractor.SetLibraryPath(programFiles);
                }
                else
                {
                    if (File.Exists(programFilesX86))
                    {
                        SevenZipExtractor.SetLibraryPath(programFilesX86);
                    }
                    else
                    {
                        string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\7z.dll";
                        SevenZipExtractor.SetLibraryPath(path);
                    }
                }
                SevenZipCompressor compressor = new SevenZipCompressor();
                compressor.ArchiveFormat = …
Run Code Online (Sandbox Code Playgroud)

c# winforms

8
推荐指数
1
解决办法
1万
查看次数

我正在尝试使用SevenZipSharp压缩一些文件,但收到错误

我在项目中引用了dll文件: SevenZipSharp.dll

然后在Form1的顶部我添加:

using SevenZip;
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个我通过按钮单击事件调用的函数:

private void Compress()
{
            string source = @"C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_02-08-13";
            string output = @"D:\Zipped.zip";

            SevenZipCompressor compressor = new SevenZipCompressor();
            compressor.ArchiveFormat = OutArchiveFormat.Zip;
            compressor.CompressionMode = CompressionMode.Create;
            compressor.TempFolderPath = System.IO.Path.GetTempPath();
            compressor.CompressDirectory(source, output);
}
Run Code Online (Sandbox Code Playgroud)

我使用了一个断点,错误就行了:

compressor.CompressDirectory(source, output);
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

无法加载7-zip库或内部COM错误!消息:DLL文件不存在

但是我已经引用了dll,为什么会出现这个错误呢?我该如何解决?

解决了这个问题:

private void Compress()
{
            string source = @"C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\SF_02-08-13";
            string output = @"D:\Zipped.zip";
            SevenZipExtractor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
            SevenZipCompressor compressor = new SevenZipCompressor();
            compressor.ArchiveFormat = OutArchiveFormat.Zip;
            compressor.CompressionMode = CompressionMode.Create;
            compressor.TempFolderPath = System.IO.Path.GetTempPath();
            compressor.CompressDirectory(source, output);
}
Run Code Online (Sandbox Code Playgroud)

c# 7zip

5
推荐指数
1
解决办法
1万
查看次数

为什么Process Exited事件会一直自动提升?

在Form1的顶部,我做了:

private Process zipFileDirectoryProcess;
Run Code Online (Sandbox Code Playgroud)

在构造函数中我做了:

zipFileDirectoryProcess = new Process();
zipFileDirectoryProcess.StartInfo.FileName = "explorer.exe";
zipFileDirectoryProcess.StartInfo.CreateNoWindow = true;
zipFileDirectoryProcess.EnableRaisingEvents = true;
zipFileDirectoryProcess.Exited += new EventHandler(zipFileDirectoryProcess_Exited);
Run Code Online (Sandbox Code Playgroud)

然后我有一个方法,我从一个按钮点击事件调用它:

private void Compress()
{
  zipFileDirectoryProcess.StartInfo.Arguments = zipFileDirectoryProcess.StartInfo.Arguments = "/select," + Path.GetFullPath(t);
  zipFileDirectoryProcess.Start();
  zipFileDirectoryProcess.WaitForExit();
  this.TopMost = true;
}
Run Code Online (Sandbox Code Playgroud)

然后在底部退出事件:

private void zipFileDirectoryProcess_Exited(object sender, EventArgs e)
        {
            this.BeginInvoke(new MethodInvoker(delegate()
            {
                this.TopMost = false;
            }));
        }
Run Code Online (Sandbox Code Playgroud)

我想要做的只是当我在方法中启动它之后关闭进程窗口时才关闭窗口/进程然后执行Exited事件.

问题是,一旦过程在2-3秒后开始,它就会自动跳转到退出事件.

我该如何解决?尝试过的例子无法弄清楚.试图添加这一行:

zipFileDirectoryProcess.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

但没有效果.

c# winforms

4
推荐指数
1
解决办法
360
查看次数

如何将过程窗口置于最前面?

我在Form1中有此按钮单击代码:

private void DriverVerifier_Click(object sender, EventArgs e)
        {

            if (MessageBox.Show("Are you Sure you want to Launch the Driver Verifier. Click Yes to Confirm and No to continue", "WinForm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
            {

            }
            else
            {
                ProcessRun.Processing(Environment.SystemDirectory, "verifier.exe", "", false, "");
            }

        }
Run Code Online (Sandbox Code Playgroud)

这将运行Windows 7和8及其他版本附带的驱动程序验证程序管理器程序。

当某些驱动程序验证程序管理器在Form后面运行并且您无法将其带到前面时,对于某些用户而言,问题出在某些Windows版本中。

我的问题是,是否有任何办法可以迫使这一进程摆在最前面?

这是我的类ProcessRun的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;

namespace Diagnostic_Tool_Blue_Screen
{
    static class ProcessRun
    {

        public static void Processing(string WorkingDirectory, string FileName, string Arguments, bool StandardOutput, …
Run Code Online (Sandbox Code Playgroud)

c# process winforms

3
推荐指数
1
解决办法
1万
查看次数

如何检查文件扩展名是大写还是小写?

我的代码中有这一行:

if (address.EndsWith("GIF") || (address.EndsWith("BMP") || address.EndsWith("JPEG") || address.EndsWith("TIFF") || address.EndsWith("RAW") || address.EndsWith("PNG")))
Run Code Online (Sandbox Code Playgroud)

例如,现在地址变量中的网址是:www.test.jpg然后它永远不会进入IF并跳出/继续.

我希望它在所有扩展名为大写和小写的例如"GIF"和"gif"我该怎么做?

(子问题如果我想检查文件扩展名做EndsWith("gif"就足够了,或者我必须在它之前添加一个点,如".gif"或像".jpeg"?)

c#

3
推荐指数
1
解决办法
3079
查看次数

为什么backgroundworker取消按钮剂量取消后台工作操作?

我在Form1的顶部添加了这两行:

backgroundWorker1.WorkerReportsProgress = true; 
backgroundWorker1.WorkerSupportsCancellation = true; 
Run Code Online (Sandbox Code Playgroud)

在按钮点击事件开始我添加:

timer2.Enabled = true;
if (this.backgroundWorker1.IsBusy == false)
            {
                this.backgroundWorker1.RunWorkerAsync();
            }
Run Code Online (Sandbox Code Playgroud)

这是DoWork事件:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            if (worker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }  
            if (filesContent.Length > 0)
            {
                for (int i = 0; i < filesContent.Length; i++)
                {
                    File.Copy(filesContent[i], Path.Combine(contentDirectory, Path.GetFileName(filesContent[i])), true);
                }
            }
            WindowsUpdate();
            CreateDriversList();
            GetHostsFile();
            Processes();
        }
Run Code Online (Sandbox Code Playgroud)

然后工作完成了事件:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if ((e.Cancelled == true))
            {
                this.Diagnose.Text …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker winforms

2
推荐指数
1
解决办法
1051
查看次数

如何计算使用DateTime传递了多少时间?

我有一个启动操作的按钮单击事件:

private void Diagnose_Click(object sender, EventArgs e)
        {
            processfinish = false;
            timer2.Enabled = true;
            timerCount = 0;
            count = 0;
            countBack = 5;
            CreateZip.Enabled = false;
            DriverVerifier.Enabled = false;
            Diagnose.Enabled = false;
            Diagnose.Text = "PROCESSING PLEASE WAIT";
            if (this.backgroundWorker1.IsBusy == false)
            {
                this.backgroundWorker1.RunWorkerAsync();
            }
            Logger.Write("***** OPERATION STARTED *****");
        }
Run Code Online (Sandbox Code Playgroud)

并完成了背景工作者的活动:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {  
                processfinish = true;
                Logger.Write("***** OPERATION ENDED *****");
        }
Run Code Online (Sandbox Code Playgroud)

并且timer1 tick事件在到达已完成的事件时开始工作:

private void timer1_Tick(object sender, EventArgs e)
        {
            count++;
            Diagnose.Text = "PROCESS HAS FINISHED" …
Run Code Online (Sandbox Code Playgroud)

c# winforms

2
推荐指数
1
解决办法
4838
查看次数

向用户显示创建文件的最佳方法是什么?

我有这个用于创建ZIP文件的代码:

void Compress(string contentDirectory, string zippedFileDirectory)
{
    … // locate 7z.dll and invoke SevenZipExtractor.SetLibraryPath
    SevenZipCompressor compressor = new SevenZipCompressor()
                                    {
                                        ArchiveFormat = OutArchiveFormat.Zip,
                                        CompressionMode = CompressionMode.Create,
                                        TempFolderPath = Path.GetTempPath()
                                    };
    string source = contentDirectory;
    string output = zippedFileDirectory;
    string zipFileName = "Diagnosis_Files.zip";
    string t = Path.Combine(output, zipFileName);
    compressor.CompressDirectory(source, t);
}
Run Code Online (Sandbox Code Playgroud)

compressor.CompressDirectory完成创建ZIP文件之后,我想向用户显示ZIP文件,以便他们可以轻松地复制它或只看到它在哪个目录中创建.

我怎样才能做到这一点?

c#

2
推荐指数
1
解决办法
68
查看次数

为什么Path.Combine没有组合路径和文件?

我有这个代码:

string log_file_name = @"\logger.txt";
            string logger_file_to_read = Path.GetDirectoryName(Application.LocalUserAppDataPath) + @"\log";
            string LoggerFile = Path.Combine(logger_file_to_read, log_file_name);
Run Code Online (Sandbox Code Playgroud)

我使用断点,我看到:logger_file_to_read包含:

C:\ Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\log

而log_file_name包含:

\ logger.txt

但后来我发现LoggerFile只包含文件名:\ logger.txt没有目录.

这是什么?

c# winforms

1
推荐指数
1
解决办法
341
查看次数

如何将文件从一个目录复制到另一个目录?

string[] s = Directory.GetFiles(t, "*.txt",SearchOption.AllDirectories);
for (int i = 0; i < s.Length; i++)
{
    File.Copy(s[i],
}
Run Code Online (Sandbox Code Playgroud)

File.Copy会将文件复制到另一个文件名.我想保留相同的文件名只是将它们从一个目录复制到另一个目录.

c# winforms

1
推荐指数
1
解决办法
6680
查看次数

标签 统计

c# ×10

winforms ×7

7zip ×1

backgroundworker ×1

process ×1