2010-11-19 50 views
1

它似乎是一个罕见的问题,我无法保存文本文件的数据 strpath =“c:\ path \ 1234 \ abcd.txt”;无法保存c#中的文本文件数据

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

,如果我通过BYTE 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; 
       } 
} 

有什么,我错了吗?

+1

那么*发生了什么?之后的文件是什么? – 2010-11-19 08:16:35

回答

1

你不会处理和冲洗流。因为这个,如果发生异常,你的程序将会泄漏一个文件句柄。试试这个:

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

现在那种违背了SaveFile方法的目的,因为它已经内置到BCL。

0

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

+0

无论如何,关门都会冲洗它 – 2010-11-19 08:56:33

0

可能是几件事,当然?你不检查文件是否已经存在。你不检查目录是否存在。您不检查您的文件系统权限。其中任何一个都可能导致它失败。

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

您也需要在这里进行一些错误处理,这样做会有双重好处,可以告诉您错误发生的位置,并希望获得更多关于错误的信息。

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; 
     } 
    } 
} 

注意我使用完全相同的方法。它每次都适用于我,因此文件已经存在。在你的情况下,你可能不会传递一个字符串?也许编码有问题?