我从套接字接收一个字节数组,字节结构只是一个固定宽度字符串的大字符数组.在某些情况下,最后一个字段是动态的(而不是固定长度),我试图将字节元素化为结构.我已经读过可变长度char数组需要是IntPtr,但我还没弄清楚如何用剩余的字节来制作它.我还读过一些文章,我可能需要第二种结构,但仍然无法弄清楚如何正确地制造它.
这是一个这样的网站
在结构中处理可变长度char数组的正确方法是什么?
结构:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Header
{
#region private member fields
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
private char[] _f1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
private char[] _f2;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
private char[] _f3;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
private char[] _f4;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
private char[] _f5;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
private char[] _f6;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
private char[] _f7;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
private char[] _f8;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
private char[] _f9; …
Run Code Online (Sandbox Code Playgroud) 我使用RichTextBox,我想格式化对齐的段落中的所有行,除了最后一行将与中心对齐.
如下:
sssssssssssssssssssssssss
sssssssssssssssssssssssss
sssssssssssssssssssssssss
ssssssssssssss
Run Code Online (Sandbox Code Playgroud)
我使用此代码进行对齐.
我的最终目标是将以下字符串转换为JSON,但我会通过将fieldname与每个值组合来让我更接近一些.
样本数据:
Field1:abc;def;Field2:asd;fgh;
Run Code Online (Sandbox Code Playgroud)
使用Regex.Replace(),我需要它至少看起来像这样:
Field1:abc,Field1:def,Field2:asd,Field2:fgh
Run Code Online (Sandbox Code Playgroud)
最终,如果可以通过一次调用中的Regex完成,这个结果将是非常棒的.
{"Field1":"abc","Field2":"asd"},{"Field1":"def","Field2":"fgh"}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这种模式的许多不同变体,但似乎无法做到正确:
(?:(\w+):)*?(?:([^:;]+);)
Run Code Online (Sandbox Code Playgroud)
只有一个我能找到的其他例子就是在做类似的事情,但只有足够的差异,我无法完全理解它.
EDIT:
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案.我不会将其作为"解决方案"发布,因为我想赞扬其他人发布的内容.最后,我从每个发布的解决方案中拿出一块,然后想出了这个.感谢所有发布的人.我认为编译,执行最快并且结果最准确的解决方案.
string hbi = "Field1:aaa;bbb;ccc;ddd;Field2:111;222;333;444;";
Regex re = new Regex(@"(\w+):(?:([^:;]+);)+");
MatchCollection matches = re.Matches(hbi);
SortedDictionary<string, string> dict = new SortedDictionary<string, string>();
for (int x = 0; x < matches.Count; x++)
{
Match match = matches[x];
string property = match.Groups[1].Value;
for (int i = 0; i < match.Groups[2].Captures.Count; i++)
{
string key = i.ToString() + x.ToString();
dict.Add(key, string.Format("\"{0}\":\"{1}\"", property, match.Groups[2].Captures[i].Value));
}
}
Console.WriteLine(string.Join(",", dict.Values));
Run Code Online (Sandbox Code Playgroud) 在尝试避免死锁并同步来自多个服务的请求时,我正在使用ROWLOCK,READPAST.我的问题是我应该把它放在一个包含CTE,子查询和CTE上的更新语句的查询中?是否有一个关键点或三个地方都应该有它(下图)?或者也许有更好的方法来编写这样的查询,以便我只能选择将要更新的行.
alter proc dbo.Notification_DequeueJob
@jobs int = null
as
set nocount on;
set xact_abort on;
declare @now datetime
set @now = getdate();
if(@jobs is null or @jobs <= 0) set @jobs = 1
;with q as (
select
*,
dense_rank() over (order by MinDate, Destination) as dr
from
(
select *,
min(CreatedDt) over (partition by Destination) as MinDate
from dbo.NotificationJob with (rowlock, readpast)
) nj
where (nj.QueuedDt is null or (DATEDIFF(MINUTE, nj.QueuedDt, @now) > 5 and nj.CompletedDt is null))
and …
Run Code Online (Sandbox Code Playgroud) 我已经开始使用ETW和Entlib 6中的进程外语义日志记录块。当我使用async / await时,未在延续线程上设置CurrentThreadActivityId,并且TPL框架不会记录传输事件。这使得执行端到端跟踪非常困难。
根据Microsoft的文档,TPL框架应该记录一个传输事件并生成一个新的activityid,但是我似乎无法使其正常工作。
这是一个显示问题的小例子:
要记录TPL事件,我使用以下方法:
<eventSource name="System.Threading.Tasks.TplEventSource" level="Informational" matchAnyKeyword="1"/>
Run Code Online (Sandbox Code Playgroud)
这是我的测试代码:
using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AsyncContextTest
{
class Program
{
static Guid _activityId = Guid.NewGuid();
static void Main(string[] args)
{
EventSource.SetCurrentThreadActivityId(_activityId);
Console.WriteLine(EventSource.CurrentThreadActivityId);
Task t = Task.Run(async () => await DoStuffAsync());
Console.WriteLine(EventSource.CurrentThreadActivityId);
Console.Read();
}
public static async Task DoStuffAsync()
{
var x = "one,two,three".Split(',');
Console.WriteLine(EventSource.CurrentThreadActivityId);
await Task.Delay(1000);
Console.WriteLine(EventSource.CurrentThreadActivityId);
var y = String.Join(",", x);
Console.WriteLine("Done");
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果
334540cc-ccb1-4196-8587-815abf237e4c …
Run Code Online (Sandbox Code Playgroud) 我有一个名称/值对的集合,它们用单词名称和值来定义,就像键/值对象一样,即
[{"Name":"ActivityId","DataType":1,"Value":"a7868f8c-07ac-488d-a414-714527c2e76f"},
{"Name":"Address1","DataType":2,"Value":"123 Main St"}]
Run Code Online (Sandbox Code Playgroud)
如果我有一个像这样的对象:
class Request
{
public Guid ActivityId { get; set; }
public string Address1 {get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何将其反序列化为上面的类?
我应该考虑使用自定义转换器吗?Json.NET 有内置的东西吗?有没有办法用我缺少的属性来装饰属性?自定义序列化会更容易吗?
我试图避免从字典中提取每个属性的数据,这将是一种简单的方法,但需要我对每个自定义实现都这样做。我更喜欢使用 Json.NET(或 .NET 框架中的某些内容)在单一方法中的基类中执行此操作。
我已经搜索了很多,大多数示例都是真实的名称/值对,没有以名称和值作为前缀,即
[{"ActivityId":"a7868f8c-07ac-488d-a414-714527c2e76f"}]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我想创建我的Application目录来保存我的配置文件.但黑莓模拟器在创建目录时抛出异常.我试过以下代码.
try {
FileConnection myAppDir = (FileConnection) Connector.open("file:///store/home/user/myAppDir", Connector.READ_WRITE);
if (!myAppDir.exists()){
myAppDir.mkdir(); // Exception throw here
}
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
抛出异常
net.rim.device.api.io.file.FileIOException: Not a directory
Run Code Online (Sandbox Code Playgroud) 这是我现在的代码:
private string downloadContent()
{
try
{
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
response = request.GetResponse();
Stream stream = response.GetResponseStream();
reader = new StreamReader(stream);
string content = reader.ReadToEnd();
return content;
}
catch
{
return error;
}
}
Run Code Online (Sandbox Code Playgroud)
这是网站:
http://chatroll.com/testings
Run Code Online (Sandbox Code Playgroud)
当我在聊天中写一些内容时,我就这样做,这样每隔n秒它就会显示我在程序textBox1中写的内容,并将其写在我硬盘上的文本文件记录器中.
问题是有时候如果我在聊天中输入的东西非常快(例如:你好(输入),嗨(输入),丹尼尔(输入))有时你的程序中不会显示你好.我不认为我输入内容的内容读得足够快.
有没有更快的方式来下载页面源并处理它?也许我下载它的方式不是那么快?
你可以在这里看到我的项目:
https://skydrive.live.com/redir?resid=3B8A7D9F66FF985B!171&authkey=!AFO6EmoF38MtkKQ
我正在构建一个新的 TFS 构建服务器,并决定使用 VS 2017 构建工具而不是安装完整版本的 VS。当我尝试构建我们的 C++ 项目时,它抛出以下错误:
Error MSB4019: The imported project "D:\Microsoft.Cpp.Default.props" was not found.
Run Code Online (Sandbox Code Playgroud)
经过数小时的研究,我离解决这个问题不远了。我尝试添加以下注册表设置,但没有帮助。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
Run Code Online (Sandbox Code Playgroud)
我猜这个产品的微软安装程序坏了。是否有针对此错误的标准修复程序,或者我应该放弃我的努力并简单地安装完整版本?
在项目文件中,我找到了这个条目:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
Run Code Online (Sandbox Code Playgroud)
所以,我猜这意味着变量 VSTargetsPath 以某种方式指向 D: 驱动器的根目录,但我不知道在哪里设置该值。我们当前的构建服务器没有名为 VSTargetsPath 的环境变量集,但它确实缺少注册表项。它还安装了完整版本的 VS。
c# ×6
.net-4.5 ×1
async-await ×1
blackberry ×1
c++ ×1
etw ×1
file-io ×1
json ×1
json.net ×1
marshalling ×1
msbuild ×1
regex ×1
richtextbox ×1
rowlocking ×1
struct ×1
tfsbuild ×1
winforms ×1