Articles of .net

Windows批处理脚本中的文件/文件夹select器对话框

通常,要求用户向批处理脚本提供文件名是一件杂乱的事情,不需要拼写错误,空格的path引号等等。 不幸的是,用户的准确性不是很出名。 在input文件位置直到运行时才知道的情况下,使用GUI进行文件selectinput可降低用户错误的可能性。 有没有办法调用File… Open从Windows批处理脚本File… Open样式gui文件select器或文件夹select器? 如果脚本用户安装了PowerShell或.NET,则可以。 请参阅下面的答案。 我也有兴趣看看其他人可以提供什么解决scheme。

C#中的“MoveFile”function(重启后删除文件)

我需要一个例子,可以让我传递一个参数 例如执行delete.exe /killme.txt 所以它将使用“MoveFile”在重启后删除killme.txt。 虽然请不要MS预编译版本,因为它有一个恼人的免责声明,每次运行在不同的计算机上。

使用BinaryReader读取大文件(> 1 GB)时,最佳缓冲区大小是多less?

我正在阅读二进制文件,这里是一个示例: public static byte[] ReadFully(Stream input) { byte[] buffer = new byte[16*1024]; int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { …… } } 缓冲区大小(16 * 1024)显然对性能有很大的作用。 我已经读过,它取决于I / O技术( SATA , SSD , SCSI等)以及其上存在的分区的分段大小(我们可以在格式化分区时定义)。 但是这里有一个问题: 是否有任何公式或最佳实践来定义缓冲区大小? 现在,我正在基于反复试验来定义。 编辑:我testing了我的服务器上的应用程序与不同的缓冲区大小,我得到了4095 * 256 * 16(16 MB)的最佳性能! 4096慢了4秒。 这里有一些旧post是非常有帮助的,但我仍然不能得到原因: .NET中更快(不安全)的BinaryReader 最佳文件缓冲区读取大小? 文件I / O与stream – 最佳的内存缓冲区大小 […]

如何获取当前用户在Windowslogin会话的唯一ID –

我需要得到一个唯一标识当前Windows用户的login会话的值。 这是一个winforms应用程序,而不是ASP.NET。 我将从多个进程中检索它,因此在同一个login会话中检索时需要返回相同的值。 在所有用户会话期间,只需在当前机器上保持唯一性 – 例如直到下一次重新启动机器。 我认为WindowsloginID是正确的,但似乎有点痛苦检索。 还有什么或更简单的方法来得到这个? 我将使用该ID来包含在一个命名pipe道服务的地址中,以在机器上运行的两个进程之间进行通信。 我想包括loginID,以避免有多个用户login时发生冲突,包括可能是同一用户的多个会话。

查找包含特定文本的窗口

我试图find一个特定的窗口是否已被一个进程打开。 该过程会产生多个窗口,我需要检查所有的窗口。 我不难find这个过程 foreach (Process p in Process.GetProcesses()) { if (p.MainModule.FileName.ToLower().EndsWith("foo.exe")) FindChildWindowWithText(p); //do work 问题是接下来要做什么。 我不能使用Process的MainWindowText ,因为它随着激活的窗口而改变。 然后我试图使用Windows函数EnumChildWindows和GetWindowText ,但我不知道如果我传递一个正确的句柄EnumChildWindows。 EnumChildWindows在通过MainWindowHandle时按预期工作,但当然MainWindowHandle随活动窗口而变化。 所以我通过Process.Handle ,但是当切换应用程序的窗口时,我得到了不同的句柄和不同的结果。 (据我所知,EnumChildWindows不仅返回句柄,而且还包括.NET中的控件 ,如果我能得到窗口的标题也不会有问题) 也许我正在做这个错误的方式,我需要一个不同的方法 – 我的问题再一次find一个与特定的正则expression式匹配的文本的窗口。 所以我可能需要一个枚举所有窗口的function,在任务栏中可见等等。 谢谢

语言栏在c#.NET中改变语言

TL; DR :尝试解决InputLanguage更改input布局但不更新语言栏显示的问题。 我正在为Trados Studio编写一个自定义插件。 其中的一部分是与应用程序本身和Word中的语言进行交互,就像这个问题一样: Windows .NET框架的所有可用语言列表 我似乎无法解决的最后一个问题是,在我使用InputLanguage设置键盘inputen-US的代码的一部分。 要说明的是, API是有限的,所以我必须在某些方面实现自动化。 最好的方法是在应用程序中使用默认的快捷方式: 首先,我将input语言改为en-US。 然后我发送一些密钥给应用程序。 然后我将input语言改回原来的样子。 然后我显示一个表单。 这里是代码: //change input language to English InputLanguage currentLang = InputLanguage.CurrentInputLanguage; InputLanguage newLang = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo("en-US")); if (newLang == null) { MessageBox.Show("The Upload Project function requires the En-US keyboard installed.", "Missing keyboard", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } else { InputLanguage.CurrentInputLanguage = newLang; […]

如何保持ReadDirectoryChangesW缺less文件更改

有很多文件活动的时候,网上有很多关于ReadDirectoryChangesW API函数缺less文件的文章。 大多数责怪ReadDirectoryChangesW函数循环被调用的速度。 这是一个不正确的假设。 我所看到的最好的解释是在下面的post,2008年4月14日星期一下午2:15:27的评论 http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/ 总结是ReadDirectoryChangesW函数报告文件更改,因为它们离开文件写入队列,而不是添加它们。 如果在犯罪之前添加了太多,就会失去其中一些的注意。 你可以看到这个与你的实现,如果你只是写一个程序,以真正快速生成一个目录中的超过1000个文件。 只要记下你得到的文件事件通知的数量,你会看到有些时候你不会收到所有的事件通知。 问题是,有没有人find一个可靠的方法来使用ReadDirectoryChangesW函数,而不必每次刷新卷? 这是不允许的,如果用户不是pipe理员,也可能需要一些时间才能完成。

生成机器指纹的最佳方法是什么?

我需要生成一个独特的string,这将不同的机器之间 – “设备指纹”。 什么是… 自定义实现的可能方法? (我有几个想法,但我认为你们可能有更好的) 现有解决scheme (商业/非商业都可以接受)

防止将数字粘贴到.net窗体中的文本框中

我已经阻止使用按键事件键入文本框中的数字。 但是当使用Ctrl + V或通过鼠标粘贴内容时,数字将被input到文本框中。 如何防止这一点? 除了数字,我必须允许粘贴/键入所有文本。

.net开源和运行平台select

我们被要求为一个大项目研究一个完全开源的解决scheme,他们希望这个项目尽可能接近100%的开源,主要是因为这是一个社区项目,未来可能只有很less的钱,用于主机的运行。 使用操作系统软件可节省许可成本,因为服务器将由现有的IT系统团队进行内部pipe理。 其中一个供应商是提出.net作为系统的组成,这很好,我知道.net应用程序可以正确地在GPL等开源许可下发布。 然而,因为我不是一个.net开发者,所以在涉及.net的权力方面,我有点困惑。 它是否必须是一个Windows服务器,这当然会导致更高的服务器成本和与MS产品的联系,或者可能在Linux等开源服务器上运行.net应用程序。 请不要把它变成一个MS Vs Linux的参数和好处,或者使用其中一个。 我们只是想确保我们充分了解使用.net的信息,以及它是如何开源的。 我希望能打开我的眼睛。