发送二进制文件TcpClient – 文件大于源

为了让我的脚趾在网络编程的水中,我写了一个小的控制台应用程序将png文件发送到服务器(另一个控制台应用程序)。 服务器正在写入的文件略大于源png文件。 它不会打开。 客户端应用程序的代码是: private static void SendFile() { using (TcpClient tcpClient = new TcpClient(“localhost”, 6576)) { using (NetworkStream networkStream = tcpClient.GetStream()) { //FileStream fileStream = File.Open(@”E:\carry on baggage.PNG”, FileMode.Open); byte[] dataToSend = File.ReadAllBytes(@”E:\carry on baggage.PNG”); networkStream.Write(dataToSend, 0, dataToSend.Length); networkStream.Flush(); } } } Server应用程序的代码是: private static void Main(string[] args) { Thread thread = new Thread(new […]

C#4.0中关于代码合同的书籍

尽管我已经知道Code Contracts已经有一段时间了,因为我在Java中使用过它,我想在C#中开始使用它们,因为它们是C#4.0的一部分。 我正在寻找学习材料,书籍或video。 也欢迎使用Altough教程,我想要全面阅读,而不是典型的“这里是你如何使用需求,这里是你如何使用Ensures”。 我正在寻找在这个领域非常突出的东西。 谢谢

正确的方法来检测CPU架构?

我正在尝试检测正确的cpu架构,以安装x86 msi或x64 msi文件。 如果我是对的,对于msi我需要os cpu架构 我不完全确定我的方式是否正确,因为我无法测试它。 你怎么看? private static string GetOSArchitecture() { string arch = System.Environment.GetEnvironmentVariable(“PROCESSOR_ARCHITECTURE”); string archWOW = System.Environment.GetEnvironmentVariable(“PROCESSOR_ARCHITEW6432”); if(archWOW != null && archWOW != “” && archWOW.Contains(“64”)) return “x64”; if(arch.Contains(“86”)) return “x86”; if (arch.Contains(“64”)) return “x64”; return “”; }

HttpWebResponse在循环运行时卡住了

我构建此方法(c#)以便从URL接收HTTP响应状态代码。 当我运行这种方法时,它的工作正常,但是当我在一个循环中运行时,它第三次卡住了。 任何线索? public static string isAlive(string url) { Console.WriteLine(“start: Is Alive Test”); WebRequest request = WebRequest.Create(url); try { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); return Convert.ToString((int)response.StatusCode); } catch(WebException ex) { HttpWebResponse res = (HttpWebResponse)ex.Response; return Convert.ToString((int)res.StatusCode); } } 循环 for (int i = 0; i < 5; i++) { string a = isAlive("https://www.yahoo.com/"); Console.WriteLine(a); }

将C ++二维固定长度char数组封装为结构成员

我试图调用一个非托管C ++函数,它有一个结构作为输入参数。 结构在头文件中定义如下: struct MyStruct { int siOrder; char aaszNames[6][25]; int siId[6]; int siTones[6]; }; 我试图将托管结构声明如下: [StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Ansi)] public struct MyStruct { public int siOrder; [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst=150)] public string aaszNames; [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)] public int[] siId; [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)] public int[] siTones; } 但没有任何成功。 我猜测编组失败了,因为aaszNames实际上是一个由六个25长的空终止字符串组成的数组。 我尝试将aaszNames声明为 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=150)] public char[] aaszNames; 必要时用空值填充数组。 但是,再一次,没有。 有什么我想念的吗? 我错了什么? […]

UpdatePanel Gridview未更新

出于某种原因,我在更改后不能让Updatepanel中的Gridview刷新。 有人可以帮忙吗? 我正在使用ToolkitScriptManager控件和UpdatePanel。 <asp:GridView blah… Cs protected void Unnamed3_Click(object sender, ImageClickEventArgs e) { int rowIndex = GridView1.SelectedIndex; GridViewRow gvr = GridView1.SelectedRow; if (rowIndex >= 0) { //delete String GridViewOne = GridView1.DataKeys[rowIndex].Value.ToString(); //delete image string imagename = gvr.Cells[2].Text; string pathToImage = @”C:\Images\”; pathToImage = pathToImage + imagename; if (System.IO.File.Exists(pathToImage)) { // Use a try block to […]

使用VS2012附带的Install Shield创建可更新的设置

我正在尝试使用Install Shield LE打包分发winforms应用程序。 这工作得很好,我甚至在setup.exe中打包了.net 4.5可再发行组件。 我遇到的问题是我现在正在创建我的应用程序的1.4版本,我希望它能够成功卸载旧版本(1.0到1.3)并安装新版本。 到目前为止,我还没有成功; 每次运行新的setup.exe时,都会收到警告,说明必须先使用控制面板中的程序和function卸载当前版本。 有没有人有一个体面的教程或一些指导,可以通过让我的新版本取代旧版本来帮助我改善我的客户体验? 非常感谢, 杰森。

按下ALT + KEY时处理KeyDown事件

当与.NET中的另一个键同时按下ALT键时,如何处理KeyDown事件?

C#SendKeys.Send

我正在使用C#SendKeys.Send方法运行一个问题。 我正在尝试用其他键替换键盘键,例如当我在键盘中按“a”时,我希望该键为“s”,例如,当我在我的代码中执行此操作时: if ((Keys)keyCode== Keys.A) { SendKeys.Send(“s”); } 现在我只在我的记事本中打印出“sa”字符,但在这种情况下我不需要打印“sa”而只需要“s”字符,因为当我按下键盘上的“a”时,必须更换“a”与“s”。 我尝试通过添加以下行删除最后一个字符: SendKeys.Send(“{BS}”); 但我得到的只是“s”字符被移除,而“a”字符就在那里。 我怎样才能防止这种情况发生?

以指数forms表示数字

我需要将以下类型的十进制数转换为指数格式 编号0.00001格式为0.01E-04 我使用以下方法: string.Format(“{0:E2}”, dValue); 但这会返回0.01E-004 所以我需要在E之后将位数限制为2。 这可能吗? 如果是这样:怎么样?