我在VS2010中使用C#for WinForms应用程序,我需要创建一个目录,其中路径对于.NET方法而言太大(我相信248字符串限制),并且跨越了谷歌的建议以使用Unicode Win32 CreateDirectory( ).我最初尝试使用Unicode调用它并传递参数,但在几次尝试失败之后,我已经减少了代码并且使用了完全正确的代码:
http://www.pinvoke.net/default.aspx/Structures/SECURITY_ATTRIBUTES.html
我仍然得到同样的错误:
捕获到System.AccessViolationException Message =尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
不可否认,我对调用Win32函数一无所知,我真的只是拉动我在网上找到的并试图学习.谁能告诉我我做错了什么?删除问题的非必要代码,我有:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.AccessControl;
using System.Text;
namespace RFCGenerator
{
[StructLayout(LayoutKind.Sequential)]
public struct SECURITY_ATTRIBUTES
{
public int nLength;
public IntPtr lpSecurityDescriptor;
public int bInheritHandle;
}
public class RFC
{
[DllImport("kernel32.dll")]
static extern bool CreateDirectory(string lpPathName, SECURITY_ATTRIBUTES lpSecurityAttributes);
protected void CopyDirectory(Uri Source, Uri Destination)
{
SECURITY_ATTRIBUTES lpSecurityAttributes = new SECURITY_ATTRIBUTES();
DirectorySecurity security = new DirectorySecurity();
lpSecurityAttributes.nLength = Marshal.SizeOf(lpSecurityAttributes);
byte[] src = …Run Code Online (Sandbox Code Playgroud) 我有一个包含大量文件的文件夹.我希望能够将每个文件渲染为一个按钮.当我点击按钮时会发生一些事情.
private void Form1_Load(object sender, EventArgs e)
{
int x = 10;
int y = 10;
/// Process the list of files found in the directory.
string[] fileEntries = Directory.GetFiles(@"c:\lotsofDocs");
foreach (string fileName in fileEntries)
{
// do something with fileName
Button newbotton = new Button();
newbotton.AutoSize = true;
newbotton.Text = fileName;
panel1.Controls.Add(newbotton);
newbotton.Location = new Point(x, y);
x += 150;
if (x == 760)
{
y += 50;
x = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,代码中没有任何疯狂.我在表单上有一个面板,我在面板上设置自动滚动为true,自动大小为false.这会导致表单保持大小和按钮(其中一些仍然是)从表单渲染,我可以向下滚动到它们.
到目前为止都很好.
如果我有100或200个文件,一切正常,如果我有1932个文件,那么渲染所有按钮大约需要10秒钟.
我已经阅读了以下问题超慢C#自定义控件,我明白我使用的方法可能不是最好在这里使用. …
我在地图上添加了5个引脚.如何告诉MapView尽可能缩放并保持所有引脚在视图中?
我只想问两个关于OOP的快速问题.
首先,OOP语言编译器实际生成的代码是否与过程语言编译器有什么不同?我的意思是,OOP只是关于你如何编写代码,还是实际编译的代码与程序不同?像C这样的更精确的过程语言基本上会产生类似于ASM编写的代码.但是OOP代码有什么不同吗?
第二,如果OOP代码在其机器代码形式中使用不同的方法,它是否比程序更慢或更快?谢谢.
有没有人知道通过扫描源文件的目录生成makefile的工具?
这可能是天真的:
朋友的服务器(是的,真的.不是我的.)被打破了,我们发现了一个运行一些机器人代码的perl二进制文件.我们找不到脚本本身(可能是通过网络收到的eval'),但我们设法创建了perl进程的核心转储.
在核心上运行字符串给了我们一些提示(主机名,用户名/密码),但不是脚本的源代码.
我们想知道脚本能够做什么,所以我们想对perl解释器中运行的perl代码进行反向工程.
搜索周围,我发现最接近perl解编译器的是B :: Deparse模块,它似乎非常适合将解析树的字节码转换回可读代码.
现在,我如何让B :: Deparse在核心转储上运行?或者,或者,如何从核心重新启动程序,加载B :: Deparse并执行它?
欢迎任何想法.
我正在尝试为我的应用程序编写收藏夹系统.我已经将模型转换为托管对象了.因此,想象用户会看到一个包含此类对象列表的屏幕.他们可以选择将一些保存到他们的收藏夹中,这会将它们保留在核心数据中.
问题是,当我创建所有这些模型对象时,我使用托管对象上下文.如果用户将单个节目保存到他们的收藏夹中,则会保存整个上下文,并保留每个单个实体.临时演员不会是他们的最爱,因为添加到收藏夹构造一个被保存并指向的对象,其不会对他人产生"最喜欢"的实体.但是所有其他对象都将被不必要地保存.
设计iPhone收藏夹系统的标准方法是什么?我应该将我的模型分成两个类,一个是我向用户显示的,另一个是保存到数据库的?这样我就可以在不将它们放入MOC的情况下构建我的模型.但这将是一个具有所有相同字段的重复类.
我创建了以下内容,用于将java中的字符串截断为具有给定字节数的新字符串.
String truncatedValue = "";
String currentValue = string;
int pivotIndex = (int) Math.round(((double) string.length())/2);
while(!truncatedValue.equals(currentValue)){
currentValue = string.substring(0,pivotIndex);
byte[] bytes = null;
bytes = currentValue.getBytes(encoding);
if(bytes==null){
return string;
}
int byteLength = bytes.length;
int newIndex = (int) Math.round(((double) pivotIndex)/2);
if(byteLength > maxBytesLength){
pivotIndex = newIndex;
} else if(byteLength < maxBytesLength){
pivotIndex = pivotIndex + 1;
} else {
truncatedValue = currentValue;
}
}
return truncatedValue;
Run Code Online (Sandbox Code Playgroud)
这是我想到的第一件事,我知道我可以改进它.我看到另一篇帖子在那里问了一个类似的问题,但他们使用字节而不是String.substring截断字符串.我想我宁愿在我的情况下使用String.substring.
编辑:我刚刚删除了UTF8引用,因为我宁愿能够为不同的存储类型执行此操作.
我觉得很容易找到,我错了.
对话要求:
对话框首选项:
我在WEB上尝试过几个例子,没有一个满足所有要求!
一些最接近解决方案的例子:
我有一个像这样的列的表:
| Country.Number | CountryName |
| US.01 | USA |
| US.02 | USA |
Run Code Online (Sandbox Code Playgroud)
我想将其修改为:
| Country | Number | CountryName |
| US | 01 | USA |
| US | 02 | USA |
Run Code Online (Sandbox Code Playgroud)
关于优化,如果我使用,性能是否有差异:
select * from mytable where country.number like "US.%"
Run Code Online (Sandbox Code Playgroud)
要么
select * from mytable where country = "US"
Run Code Online (Sandbox Code Playgroud)