Tag: .net

在c#.net中更新zip时出现内存不足exception

我在尝试在c#.net中的Zip文件中添加文件时遇到OutofMemoryException。 我使用32位架构来构建和运行应用程序 string[] filePaths = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + “\\capture\\capture”); System.IO.Compression.ZipArchive zip = ZipFile.Open(filePaths1[c], ZipArchiveMode.Update); foreach (String filePath in filePaths) { string nm = Path.GetFileName(filePath); zip.CreateEntryFromFile(filePath, “capture/” + nm, CompressionLevel.Optimal); } zip.Dispose(); zip = null; 我无法理解它背后的共鸣

GZipStream压缩问题(丢失字节)

我对GZip Serializer有一些奇怪的问题。 尝试使用数据序列化对象。 以下代码给出结果( 在调试中的POINT1 ):ms.Length = 100028和uncompressedStream.Length = 100027 POINT1之后有exception“解析完成之前遇到的流结束。”,我认为是这个丢失字节的结果。 我正在使用.net 4.0。 //generating data int length = 100000; byte[] data = new byte[length]; for (int i = 0; i < length; i++) { data[i] = System.Convert.ToByte(i % 100 + i % 50); } //serialization into memory stream IFormatter formatter = new BinaryFormatter(); var ms […]

从整数中获取第七位数字

我有一个10位数的整数。 我需要获得该整数的第7位数。 我找到了一个数学解法来获得整数的第一个数字。 var myDigit = 2345346792; var firstDigit = Math.Abs(myDigit); while (firstDigit >= 10) { firstDigit /= 10; } 我如何从myDigit获得第七位数字? 我试图避免强制转换为字符串并执行子字符串。 我希望看到获得第七位数字的数学版本。 任何人?

可以用通配符指定目录路径吗?

我有以下代码: foreach (string file in Directory.GetFiles(sourcePath)) { // whatever } 从特定目录获取文件。 是否可以使用通配符匹配目录? 例如: c:\test\di* 将匹配目录中的所有文件: c:\test\dictionary\ c:\test\directory\ c:\test\dig\ 我看到你可以将文件filter传递给GetFiles方法,但这仅适用于文件,而不适用于目录名称。

上传到FTP并使用FtpWebRequest后退后,存档或映像已损坏

我有两种方法: 将文件上载到FTP服务器 从服务器下载文件。 一切都与文本或xml文件完美配合。 但是,当我尝试上传然后下载存档或图像时,我得到“Windows无法打开文件夹。压缩的zip文件无效”,档案错误,图像几乎相同。 可能是什么问题? 这是我的方法列表: 上传: private string Upload(string Login, string Password, string FilePath, string FileName, string uuid, string FTPDir) { string CreateDirectory = CreateFTPDirectory(Login, Password, uuid, FTPDir); FtpWebRequest request = (FtpWebRequest)WebRequest.Create(@”ftp://” + FTPDir + uuid + “/” + FileName); request.Method = WebRequestMethods.Ftp.UploadFile; request.UseBinary = true; StreamReader sourceStream = new StreamReader(FilePath + FileName); […]

将表单添加到UserControl – 这可能吗?

通常,控件正被添加到表单中。 但我需要做相反的事情 – 向容器用户控件添加一个Form实例。 这背后的原因是我需要将第三方应用程序嵌入到我自己的应用程序中。 由于复杂性,将表单转换为用户控件是不可行的。

LinQ WHERE string.Contains还是string.IndexOf?

我需要写一些可以得到相同结果的东西: var result = collection.Where( o => o.Name.IndexOf( “some_string2” ) != -1 || o.Name.IndexOf( “some_string_2” ) != -1 || o.Name.IndexOf( “some_string3” ) != -1 ) 要检查的字符串的数量和值(some_string_1,2和3)是未知的(来自DB),所以更通用的… 我尝试了以下,但失败了…… var stringsToCheck = someCommaSeparatedStrings.ToLower().Split( ‘,’ ).ToList(); var result = collection.Where( o => stringsToCheck.Contains( o.ToLower() ) ); 换句话说,我需要从集合中检索所有包含某些特定字符串的对象。

OAuth2资源所有者密码通过API授予

我目前正在构建一个需要OAuth2的API,但无法找到一个可以通过RESTful API处理原生移动应用中单点登录的库。 大多数我发现只有一个网络弹出窗口,已被否决该项目。 目前正在运行的B2C无法使用ROPG。 有没有办法使用C#.NET和Azure轻松地设置另一个库? 更新: 尝试使用B2C每个Fei Xue回答下面的问题,我们得到了从Microsoft Graph获取访问令牌的重点。 在POST的主体中,我们做了以下事情: resource = https%3A%2F%2FGraph.windows.net&client_id = [B2C设置 – 应用程序 – AppId]&grant_type =密码&用户名= rob%40 [租户] .onmicrosoft.com&密码= [密码]&client_secret = [B2C设置 – 应用程序 – 应用程序密钥 – client_secret] 我们对命名空间的错误是由于我们尝试的用户名。 这是一个使用电子邮件作为用户名的B2C租户,这就是命名空间错误的原因。 我们解决该错误的唯一方法是创建一个B2C用户,其电子邮件地址以租户结尾,如下所示: 抢劫@ [租户] .onmicrosoft.com 我们现在正在获取访问令牌,但该令牌不会使用我们的azure app service api app进行身份validation,这是最初的目标。 我们要完成的是发送对B2C登录有效的用户名和密码,并获得对api应用程序有效的IdToken或Access Token。 api应用程序通过AppA身份validation设置连接到B2C,该设置为AAD配置了客户端ID和来自B2C设置应用程序的秘密设置。 更新: 我们在Azure web api中尝试通过graph.windows.net令牌进行身份validation,我们在https://Graph.windows.net允许的令牌受众中添加了我们的App Service – 身份validation – Active […]

参考和值类型方案

我一直在努力彻底了解参考和价值类型。 就在我以为自己拥有它的时候,我遇到了这个场景…… 我创建了一个包含单个对象的类。 class Container { public object A {get; set;} } 当我创建这个Container类的实例(a)时,我正在创建一个引用类型的实例。 我为类中的对象分配了一个整数。 据我所知,这将被装箱作为一个对象,另一个参考类型。 int start = 1; Container a = new Container{ A=start }; 我创建了Container类的另一个实例(b),但是为它分配了第一个容器的值,b的值现在是对a的引用。 Container b = a; 正如预期的那样,当我打印出aA和bA的值时,它们是相同的。 Console.WriteLine(“aA={0},bA={1}”,aA,bA); //aA=1,bA=1 并且,正如预期的那样,当我更改aA的值时,bA的值也会因为它们引用相同的对象而发生变化。 aA = 2; Console.WriteLine(“aA={0},bA={1}”,aA,bA); // aA=2,bA=2 现在我决定尝试使用单个本地对象。 同样,我将整数打包到第一个对象中,并将第一个对象的值分配给第二个对象。 我相信这个对象应该是一个引用类型,所以c和d应该引用同一个对象。 不改变任何东西,它们返回相同的值。 int start = 1; object c = start; object d […]

可重复输入过程的标准输入

我有一个(C#)控制台应用程序,它维护一个状态。 通过控制台向应用程序提供各种输入,可以更改状态。 我需要能够通过一点输入来提供应用程序,然后读取输出冲洗并重复。 我创建了一个新进程,并完成了重定向输入/输出的所有正常工作。 问题是,在我发送输入并在标准输出上调用ReadLine()之后,它在标准输入上调用Close()之前不返回值,之后我不能再写入输入流了。 如何在仍然接收输出的同时保持打开输入流? var process = new Process { StartInfo = { FileName = @”blabal.exe”, RedirectStandardInput = true, RedirectStandardError = true, RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, ErrorDialog = false } }; process.EnableRaisingEvents = false; process.Start(); var standardInput = process.StandardInput; standardInput.AutoFlush = true; var standardOutput = process.StandardOutput; var standardError […]