小编Raj*_*han的帖子

删除正在使用的文件

我创建了一个简单的程序来删除C#中的临时文件(为了好玩,而不是一个主要项目),并且遇到锁定文件(使用中)问题.你通常如何排除这些文件?作为参考,我收到错误:

该进程无法访问文件'ExchangePerflog_8484fa31c65c7a31cfcccd43.dat',因为它正由另一个进程使用.

码:

static void Main(string[] args)
    {
        string folderPath = string.Empty;
        folderPath = System.Environment.GetEnvironmentVariable("temp");
        deleteFilesInDirectory(folderPath);
    }

    public static void deleteFilesInDirectory(string folderPath) 
    {

        try
        {
            var dir = new DirectoryInfo(folderPath);
            dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
            dir.Delete(true);
            MessageBox.Show(folderPath + " has been cleaned.");
        }
        catch (System.IO.IOException ex)
        {
            MessageBox.Show(ex.Message); 
            return;

        } 
    }     
Run Code Online (Sandbox Code Playgroud)

c#

18
推荐指数
4
解决办法
5万
查看次数

Winsock编程

自从我开始使用它以来,我对Winsock只有麻烦.我似乎无法初始化Winsock来拯救我的生命.我不是要求任何人编写整个程序(因为我知道这有多烦人)我只需要帮助Winsock.我已经尝试了几个编译器,总是会遇到奇怪的错误.

1>Compiling...
1>main.cpp
1>Linking...
1>main.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main
1>C:\Users\Rory\ProjectX\ProjectX\Debug\ProjectX.exe : fatal error LNK1120: 2 unresolved externals
1>Build log was saved at "file://c:\Users\Rory\ProjectX\ProjectX\ProjectX\Debug\BuildLog.htm"
1>ProjectX - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#include <cstdlib>
#include <iostream>
#include <string.h>
#include <winsock2.h>

int iReqWinsockVer = 2;

using namespace std;

int main()
{
    cout<<"Initializing Winsock …
Run Code Online (Sandbox Code Playgroud)

c++ build winsock linker-errors

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

派生类使用错误的方法

我已将代码简化为此

 internal class Program
{
    private static void Main(string[] args)
    {
        Child d = new Child();
        int i = 100;
        d.AddToTotal(i);

        Console.ReadKey();
    }

    private class Parent
    {
        public virtual void AddToTotal(int x)
        {
            Console.WriteLine("Parent.AddToTotal(int)");
        }
    }

    private class Child : Parent
    {
        public override void AddToTotal(int number)
        {
            Console.WriteLine("Child.AddToTotal(int)");
        }

        public void AddToTotal(double currency)
        {
            Console.WriteLine("Child.AddToTotal(double)");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是这个电话

public void AddToTotal(double currency)
Run Code Online (Sandbox Code Playgroud)

虽然我用int调用它,它应该使用

public override void AddToTotal(int number)
Run Code Online (Sandbox Code Playgroud)

使用父级返回预期结果.

 Parent d = new Child();
 int i = 100; …
Run Code Online (Sandbox Code Playgroud)

c# inheritance overloading

6
推荐指数
1
解决办法
209
查看次数

"使用"有什么好处

我想了解它们之间的区别

public DataTable ExectNonActQuery(string spname, SqlCommand command)
{
    using (DataTable dt = new DataTable())
    {
        cmd = command;
        cmd.Connection = GetConnection();
        cmd.CommandText = spname;
        cmd.CommandType = CommandType.StoredProcedure;
        da.SelectCommand = cmd;
        da.Fill(dt);
        return (dt);
    }
}
Run Code Online (Sandbox Code Playgroud)

public DataTable ExectNonActQuery(string spname, SqlCommand command)
{
    DataTable dt = new DataTable();
    cmd = command;
    cmd.Connection = GetConnection();
    cmd.CommandText = spname;
    cmd.CommandType = CommandType.StoredProcedure;
    da.SelectCommand = cmd;
    da.Fill(dt);
    return (dt);
    }
}
Run Code Online (Sandbox Code Playgroud)

我实际上想要了解使用"使用"创建新对象的好处,而不是像这样直接创建它

DataTable dt = new DataTable();
Run Code Online (Sandbox Code Playgroud)

c# using

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

其中T:<interface>到T:class给出cs0452

我有

public static void SecureTcpRpc<InterfaceType>(string uri, 
                                               Action<InterfaceType> action) 
                                              where InterfaceType : class;
Run Code Online (Sandbox Code Playgroud)

然后我在这里使用它

 private static AuthorizedActionResult 
                RunChannelAction<T>(IEnumerable<string> uris, 
                                    Func<T, AuthorizedActionResult> actionFunc)
                                    where T : IPingable
            {
                    WcfClient.SecureTcpRpc<T>....
Run Code Online (Sandbox Code Playgroud)

编译器不喜欢我将T限制为IPingable.我不明白为什么它反对.IPingable是一种引用类型,因此它匹配SecureTpcRpc方法的约束.但是编译器说"T必须是引用类型"

c# generics

3
推荐指数
1
解决办法
729
查看次数

如何在不调用基本代码的情况下扩展用户控件

语言:C#主题:扩展控件.

我有一个用户控件B,它有一个字段F,它是一个显示图像的控件.

我有第二个用户控件X,它扩展了B.它使用了基础F,但它有自己的实现(显示特定于X的按钮等).

X和B都在不同的项目中找到,B不是抽象的; 这是一个具体的实施.

问题:当创建X时,调用第一个B的构造函数,其中它初始化F.在调用B的构造函数之后,执行它自己的构造函数,其中它将F设置为其他东西.

这是不可取的:
1)F的两个实例存在而X应该使用新的F,它似乎在显示图像时引用基数F.

解决方法:
1)在X中,在替换FI之前可以处理base.F - 或
2)在B中,我可以测试类类型:如果type是X则跳过F的初始化.

虽然我可以使用这些变通办法中的任何一种,但有些东西告诉我存在更好的架构.但是什么?

.net c#

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

ComboBox SelectedItem绑定未更新

我有点困惑:这有效:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Label Content="Rol" />
            <ComboBox ItemTemplate="{StaticResource listRollen}"
                      Height="23" Width="150"
                      SelectedItem="{Binding Path=SelectedRol, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                      ItemsSource="{Binding Path=allRollen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
        </StackPanel>
Run Code Online (Sandbox Code Playgroud)

和SelectedRol的属性是:

public TblRollen SelectedRol
    {
        get { return _selectedRol; }
        set
        {
            if (_selectedRol != value)
            {
                _selectedRol = value;
                OnPropertyChanged("SelectedRol");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Label Content="Soort" />
            <ComboBox ItemTemplate="{StaticResource listSoorten}"
                      Height="23" Width="150"
                      ItemsSource="{Binding Path=allSoorten}"
                      SelectedItem="{Binding Path=SelectedProduct, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        </StackPanel>
Run Code Online (Sandbox Code Playgroud)

具有以下属性SelectedProduct:

public TblProduktSoorten SelectedProduct
    {
        get { return _selectedPSoort; }
        set
        {
            if (_selectedPSoort != …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml binding combobox

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

访问另一个类的受保护成员

我有一个类 A,我需要从中访问类 B 的受保护成员,其方式与在 C++ 中使用朋友关键字的方式相同。但是,内部修饰符不适合我的需要。B 类将需要创建 A 类的实例,修改其私有数据,并返回对该类的引用。这些 A 类成员需要对原始调用者保持私有。

public class A
{
    protected int x;
}

public class B
{
    public static A CreateClassA()
    {
        A x = new A();
        x.x = 5;   // ERROR : No privilege
        return x;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# class access-modifiers friend

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

该进程无法访问该文件,因为它正在被使用(错误)

我试图将文本文件中的行向上移动,然后将其重写回原始文件,但由于某种原因而出现错误,似乎无法弄明白.

using (StreamReader reader = new StreamReader("file.txt"))
{
    string line;
    int Counter = 0;

    while ((line = reader.ReadLine()) != null)
    {
        string filepath = "file.txt";
        int i = 5;
        string[] lines = File.ReadAllLines(filepath);

        if (lines.Length >= i)
        {
            string tmp = lines[i];
            lines[i] = lines[i-1];
            lines[i-1] = tmp;
            File.WriteAllLines(filepath, lines);
        }   
    }
    Counter++;
}
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio c#-4.0

0
推荐指数
1
解决办法
2271
查看次数