这似乎是一个罕见的问题,我无法保存文本文件数据 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;
}
}
这里有什么我错的吗?
答案 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;
}
}
}
注意我使用完全相同的方法。它每次都适合我,所以文件已经存在。在您的情况下,您可能没有传递字符串?也许是编码问题?