File.Create正在创建文件的文件夹instand

时间:2015-09-03 20:30:57

标签: c#

我正在编写一个将序列化类并将其保存到文件的函数,某些类必须保存在不同的文件夹中。我使用Unity和C#。这是我的代码:

    public void save<T>(T data, string fileName) where T : class{
    if (fileName == "")
        Debug.Log ("Empty file path");
    FileStream file = null;
    try{
        if(fileName.IndexOf("/") > 0){
            string[] strDirName = fileName.Split(new char[]  {'/'});
            string dirName = strDirName[0];
            if(!Directory.Exists(Application.persistentDataPath + dirName)){
                Directory.CreateDirectory(Application.persistentDataPath + "/" + dirName);
            }
        }
        file = File.Create(constructFilePath(fileName));
        string a = constructFilePath(fileName);
        binFormatter.Serialize(file, data);
        Debug.Log ("File saved succesfully" + fileName);
    }catch(IOException e){
        Debug.Log(e.ToString());
    }finally{
        if(file != null)
            file.Close();
    }
}

string constructFilePath(string fileName){
    return Path.Combine(Application.persistentDataPath, fileName);
}

我不知道为什么它将文件保存为文件夹,这是因为我添加了这一行来构造constructFilePath

if(fileName[0] != "/")
    fileName = "/" + fileName;

但如果没有此文件,它会创建不同的文件夹。它将Application.persistentDataPath与文件夹名称连接起来并在那里创建文件 所以,如果我的persistentDataPath = C:/ Users / User / AppData / LocalLow / DefaultCompany / TestGame,我想将文件存储在文件夹a中,并将文件b存储在其中

C:/Users/User/AppData/LocalLow/DefaultCompany/TestGame/a/b

它创建名为TestGamea的文件夹并将b存储在其中

 C:/Users/User/AppData/LocalLow/DefaultCompany/TestGamea/b

1 个答案:

答案 0 :(得分:2)

你正在评估一件事并在这里执行不同的事情:

if(!Directory.Exists(Application.persistentDataPath + dirName)){
                Directory.CreateDirectory(Application.persistentDataPath + "/" + dirName);
            }

将其更改为:

if(!Directory.Exists(Path.Combine(Application.persistentDataPath, dirName))){
                Directory.CreateDirectory(Path.Combine(Application.persistentDataPath, dirName));
            }
像埃里克所说的那样,使用Path.Combine。它可以可靠地组合路径部分并确保每次都获得相同的结果,因此您不必担心字符串操作。