Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件无法使用,因为另一个进程正在使用它-can';我找不到小溪_C#_Asp.net_Visual Studio 2012 - Fatal编程技术网

C# 文件无法使用,因为另一个进程正在使用它-can';我找不到小溪

C# 文件无法使用,因为另一个进程正在使用它-can';我找不到小溪,c#,asp.net,visual-studio-2012,C#,Asp.net,Visual Studio 2012,我正在使用StreamWriter写入文件。我使用的是“using”,所以它应该会自动关闭,但是当我尝试保存(写入文件)时,它会出现“无法访问文件,因为另一个进程正在使用”错误。我似乎不知道它在哪里或为什么给我这个错误。这是我的密码 [WebMethod] public static bool saveToCSV(string[] valueArray) { bool saveOK = false; try {

我正在使用StreamWriter写入文件。我使用的是“using”,所以它应该会自动关闭,但是当我尝试保存(写入文件)时,它会出现“无法访问文件,因为另一个进程正在使用”错误。我似乎不知道它在哪里或为什么给我这个错误。这是我的密码

[WebMethod]
    public static bool saveToCSV(string[] valueArray)
    {
        bool saveOK = false;

        try
        {
            string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

            using (StreamWriter sw = new StreamWriter(filepath + "\\spreadsheet.csv", false))
            {

                foreach (var i in valueArray)
                {
                    if (i.ToString() == "\n")
                    {
                        sw.Write(sw.NewLine);
                    }
                    else
                    {
                        {
                            if (i.ToString() == "")
                            {
                                sw.Write(" ");
                                sw.Write(",");
                            }
                            else
                            {
                                sw.Write(i.ToString());
                                sw.Write(",");
                            }
                        }
                    }
                }
                sw.Flush();
            }//close using

            saveOK = true;
        }
        catch (Exception ex)
        {
            saveOK = false;
        }

        return saveOK;
    }
代码看起来不错

你还在哪里处理这个文件?是否所有其他文件IO操作都包含在使用块的
中?哪些其他应用程序可能正在接触该文件

如果您在别处打开该文件,但尚未处理该流,或者如果另一个应用程序打开了该文件,则会出现此异常。

该代码看起来正常

你还在哪里处理这个文件?是否所有其他文件IO操作都包含在使用
块的
中?哪些其他应用程序可能正在接触该文件


如果您在其他位置打开该文件,但尚未处理该流,或者如果其他应用程序打开了该文件,则会出现此异常。

这里可能发生的情况是,您的
saveToCSV
方法同时被调用了两次。实际上,两个客户端同时调用web服务。这可能导致第一次调用打开文件进行写入,因此第二次调用被拒绝访问

为了防止这种情况,您应该使用锁来控制对文件的访问

private static object _key = new object();

[WebMethod]
public static bool saveToCSV(string[] valueArray)
{
   ...
   lock (_key) { 
    using (StreamWriter sw = new StreamWriter(filePath + "\\spreadsheet.csv")) {
      ...
    }
   }
}

现在,如果同时发生多个客户端调用,它们将一次只尝试访问一个文件

这里可能发生的情况是,您的
saveToCSV
方法同时被调用了两次。实际上,两个客户端同时调用web服务。这可能导致第一次调用打开文件进行写入,因此第二次调用被拒绝访问

为了防止这种情况,您应该使用锁来控制对文件的访问

private static object _key = new object();

[WebMethod]
public static bool saveToCSV(string[] valueArray)
{
   ...
   lock (_key) { 
    using (StreamWriter sw = new StreamWriter(filePath + "\\spreadsheet.csv")) {
      ...
    }
   }
}

现在,如果同时发生多个客户端调用,它们将一次只尝试访问一个文件

尝试运行以查看哪个进程正在阻塞资源。代码看起来很好,只是这行中有一组额外的
{}
,但不应损坏代码。。只需快速地再看一眼。
{if(i.ToString()==”){sw.Write(“”);sw.Write(“”;}else{sw.Write(i.ToString());sw.Write(“,”;}
查看所有代码,查看是否正在为该事实创建StreamWriter或StreamReader的另一个实例。尝试运行以查看哪个进程正在阻止资源。代码看起来很好,但您还有一组
{}
在这一行中,但不应该损害代码..只需要快速地再看一眼..
{if(i.ToString()==“”){sw.Write(“”);sw.Write(“”,“”;}else{sw.Write(i.ToString());sw.Write(“,”;}
查看您的所有代码,看看您是否正在为该事实创建另一个StreamWriter或StreamReader实例..Mm.现在您提到了它,我查看了我的“打开文件”方法,我发现我在阅读后从未关闭过流。我现在觉得很傻。Mm.现在您提到了它,我查看了我的“打开文件”方法,我看到我在阅读后从未关闭过流。我现在觉得很傻。非常感谢你的输入。实际发生的是,在我的“openCSV”方法中,我从未关闭流:(。但这是一本非常有趣的书。非常感谢你的输入。实际发生的是在我的“openCSV”中方法我从未关闭过流:(。但这是一本非常有趣的书