问题列表 - 第33618页

帮助在C#中使用PInvoke CreateDirectory()

我在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)

c# pinvoke

2
推荐指数
1
解决办法
2185
查看次数

如何使我的应用程序像Windows资源管理器一样快速地渲染文件

我有一个包含大量文件的文件夹.我希望能够将每个文件渲染为一个按钮.当我点击按钮时会发生一些事情.

 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#自定义控件,我明白我使用的方法可能不是最好在这里使用. …

c# windows optimization explorer

5
推荐指数
1
解决办法
911
查看次数

Android Map缩放以显示所有引脚

我在地图上添加了5个引脚.如何告诉MapView尽可能缩放并保持所有引脚在视图中?

android android-mapview

6
推荐指数
2
解决办法
7931
查看次数

初学OOP问题

我只想问两个关于OOP的快速问题.

首先,OOP语言编译器实际生成的代码是否与过程语言编译器有什么不同?我的意思是,OOP只是关于你如何编写代码,还是实际编译的代码与程序不同?像C这样的更精确的过程语言基本上会产生类似于ASM编写的代码.但是OOP代码有什么不同吗?

第二,如果OOP代码在其机器代码形式中使用不同的方法,它是否比程序更慢或更快?谢谢.

oop comparison programming-languages

16
推荐指数
1
解决办法
732
查看次数

简单的makefile生成实用程序?

有没有人知道通过扫描源文件的目录生成makefile的工具?

这可能是天真的:

  • 无需检测外部依赖项
  • 使用默认编译器/链接器设置

c++ makefile

7
推荐指数
3
解决办法
9538
查看次数

逆向工程基于核心转储的Perl脚本

朋友的服务器(是的,真的.不是我的.)被打破了,我们发现了一个运行一些机器人代码的perl二进制文件.我们找不到脚本本身(可能是通过网络收到的eval'),但我们设法创建了perl进程的核心转储.

在核心上运行字符串给了我们一些提示(主机名,用户名/密码),但不是脚本的源代码.

我们想知道脚本能够做什么,所以我们想对perl解释器中运行的perl代码进行反向工程.

搜索周围,我发现最接近perl解编译器的是B :: Deparse模块,它似乎非常适合将解析树的字节码转换回可读代码.

现在,我如何让B :: Deparse在核心转储上运行?或者,或者,如何从核心重新启动程序,加载B :: Deparse并执行它?

欢迎任何想法.

perl reverse-engineering

11
推荐指数
1
解决办法
1760
查看次数

核心数据:创建多个托管对象,但只保存一些?

我正在尝试为我的应用程序编写收藏夹系统.我已经将模型转换为托管对象了.因此,想象用户会看到一个包含此类对象列表的屏幕.他们可以选择将一些保存到他们的收藏夹中,这会将它们保留在核心数据中.

问题是,当我创建所有这些模型对象时,我使用托管对象上下文.如果用户将单个节目保存到他们的收藏夹中,则会保存整个上下文,并保留每个单个实体.临时演员不会是他们的最爱,因为添加到收藏夹构造一个被保存并指向的对象,其不会对他人产生"最喜欢"的实体.但是所有其他对象都将被不必要地保存.

设计iPhone收藏夹系统的标准方法是什么?我应该将我的模型分成两个类,一个是我向用户显示的,另一个是保存到数据库的?这样我就可以在不将它们放入MOC的情况下构建我的模型.但这将是一个具有所有相同字段的重复类.

iphone favorites core-data

7
推荐指数
1
解决办法
3502
查看次数

按字节截断字符串

我创建了以下内容,用于将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引用,因为我宁愿能够为不同的存储类型执行此操作.

java string truncate

9
推荐指数
3
解决办法
2万
查看次数

用于选择多个文件和文件夹.NET的必需对话框

我觉得很容易找到,我错了.

对话要求:

  • 可以同时浏览MULTIPLE FILES/FOLDERS.
  • 可以在.NET窗体中使用.
  • 免费或可以在GPL下使用.
  • 适用于Win Xp和Win 7.

对话框首选项:

  • C#
  • 看起来像.NET中的OpenFileDialog.
  • 有用于粘贴路径的文本框.

我在WEB上尝试过几个例子,没有一个满足所有要求!

一些最接近解决方案的例子:

.net c# openfiledialog folderbrowserdialog winforms

14
推荐指数
1
解决办法
3751
查看次数

MySQL优化,"喜欢"vs"="

我有一个像这样的列的表:

| 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)

mysql

5
推荐指数
2
解决办法
3017
查看次数