无法在c#中保存文本文件数据

时间:2010-11-19 08:12:09

标签: .net filestream

这似乎是一个罕见的问题,我无法保存文本文件数据 strPath的= “C:\路径\ 1234 \ abcd.txt”;

这里的文件正在被创建,但文件中的数据没有被保存。

如果我通过字节b检查长度显示为121。

public int SaveFile(byte[] b,string lstrpath)
        {
FileStream fs = new FileStream(strpath,FileMode.Create);
                fs.Write(b,0,b.Length);
                fs.Close();
                if(File.Exists(strpath))
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
}

这里有什么我错的吗?

4 个答案:

答案 0 :(得分:1)

您没有处理和冲洗流。因此,如果发生异常,程序将泄漏文件句柄。试试这个:

public void SaveFile(byte[] b,string lstrpath)
{
    File.WriteAllBytes(lstrpath, b);
}

现在有点违背SaveFile方法的目的,因为它已经内置到BCL中。

答案 1 :(得分:0)

在关闭之前执行Flush()。那就是fs.Flush();

答案 2 :(得分:0)

肯定可能是一些事情吗?您不检查文件是否已存在。您不检查该目录是否存在。您不检查文件系统权限。其中任何一个都可能导致它失败。

另外,当你说失败时,你的意思是什么?你有例外吗?一个错误?它会返回0还是1?它是否默默失败?文件是否为空?

你在这里也需要一些错误处理,这样可以告诉你错误发生的地方,并希望得到更多关于它的更多信息。

答案 3 :(得分:0)

其他答案都是有效的(异常处理,处置......),您甚至可能希望使用using语句。我将使用Darin Dimitrovs的答案,这使您的代码更简单易读。

关于你的问题:你怎么称呼这种方法?这在一个简单的控制台应用程序中适用于我:

class Program
{
    static void Main(string[] args)
    {
        var text = "abcd";
        var encoding = new UTF8Encoding();
        var bytes = encoding.GetBytes(text);
        SaveFile(bytes, @"D:\test.txt");
    }

    public static int SaveFile(byte[] b, string strpath)
    {
        FileStream fs = new FileStream(strpath, FileMode.Create);
        fs.Write(b, 0, b.Length);
        fs.Close();
        if (File.Exists(strpath))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}

注意我使用完全相同的方法。它每次都适合我,所以文件已经存在。在您的情况下,您可能没有传递字符串?也许是编码问题?