【问题标题】:Sqlite File Location Core DataSqlite 文件位置核心数据
【发布时间】:2014-07-30 17:53:40
【问题描述】:

通常,核心数据应用程序的 sqlite 存储文件位于

Library>Application Support>iPhone Simulator>7.1(或您正在使用的任何版本)>Applications>(包含您的应用程序的文件夹)>Documents

文件夹,但我在 IOS 8 中找不到它。我假设他们只会在 iPhone Simulator 文件夹中添加一个 8.0 文件夹,但它不存在。有人找到了吗?

【问题讨论】:

  • 我很确定你的问题是重复的,考虑到我在你被问到之前一个多星期就问过了。考虑到这是我问过的第一个问题,如果你让我得到这个问题的功劳,我将不胜感激,而且你似乎已经享有盛誉@HenryGlendening
  • 看看这个如何检查 dbpath stackoverflow.com/a/27358291/3840428
  • 有人知道如何从实际设备中获取 CoreData 文件吗?我曾经在旧版本的 Xcode 中通过 iTunes 执行此操作,但由于 Xcode 8 / iOS10 我不认为 CoreData 文件存储在应用程序的文档目录中,因此在 iTunes 中不可见。有没有办法从计算机上的设备获取 CoreDate 文件?
  • 我不知道他们为什么继续移动这个。他们应该把它放在某个地方,然后离开它。

标签: ios objective-c swift sqlite core-data


【解决方案1】:

我设法找到了 sqlite 文件,现在它在这个路径中:

Library/Developer/CoreSimulator/Devices/(数字和字母)/data/Containers/Data/Application/(数字和字母)/Documents/

(数字和字母)代表您的应用程序/计算机独有的文件夹,但看起来像这样:779AE2245-F8W2-57A9-8C6D-98643B1CF01A

我可以通过进入 appDelegate.m 找到它,向下滚动到

- (NSURL *)applicationDocumentsDirectory 

方法,以及NSLogging的返回路径,像这样:

// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory  inDomains:NSUserDomainMask] lastObject]);

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
 }

这将为您提供独特的路径,让您更轻松,因为使用 2 个未命名的文件夹/字母和数字字符串很难找到它。

Swift 4.2:

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

【讨论】:

  • 使用 xcrun simctl list 获取模拟器名称及其 UUID 列表。
  • 请注意,如果您为应用组使用共享数据库(例如,当您使用扩展程序时),则路径为 Library/Developer/CoreSimulator/Devices/$number/data/Containers/Shared/ AppGroup/$number/Name.sqlite
  • 请注意,在 2019 中,Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Documents/ 不再为真。现在你在Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Library/Application Support/中找到了.sqlite 和相关的两个文件
  • @GangFang 我正在尝试将我在 Xcode 7 中构建的 Objective C 代码转换为最新的 swift 版本并创建新项目,所以我如何将这两个不同的 .sqlite 文件迁移到一个地方.
  • 尝试NSLog(@"APPLICATION SUPPORT DIRECTORY: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject]);@Gang Fang 指向目录结构变化的指针突出显示需要从NSDocumentDirectory更改搜索位置
【解决方案2】:

没有一个答案提到实际获取数据库文件位置的最简单方法。

它甚至不需要您修改源代码,因为它是 XCode 中的一个简单的运行时切换。

  1. 选择 Run 按钮旁边的 Edit Scheme...。

  2. 选择 Run / Arguments 并添加以下两个选项:

    -com.apple.CoreData.SQLDebug 1
    -com.apple.CoreData.Logging.stderr 1
    

  3. 运行应用程序,您会在日志中看到:

【讨论】:

  • 这确实是最简单最好的解决方案。谢谢!
  • 对我来说日志没有出现,你能帮帮我吗?
  • @Augusto 我在这里帮不了你,但如果你提出一个新问题,人们可能会回答并帮助你。
  • 很好的答案!这应该是公认的答案。除了通过 Xcode 首选项之外,您还知道有什么方法可以在控制台中更改此输出的颜色吗?如果能再突出一点就好了
  • 感谢您的提示!路径不断变化,对我来说现在(iOS 13.3.1)路径是 /Users/***/Library/Developer/CoreSimulator/Devices/A91CEB1C-B15D-46B5-9B83-DB22056DEFD1/data/Containers/Shared/AppGroup/B835599A- CA36-432F-871A-17EDA181CC54/ 所以最好从 CoreData 调试信息中获取,而不是自己猜测。
【解决方案3】:

试试这个简单的 3 步

  1. 将以下代码复制到didFinishLaunchingWithOptions你的appdelegate.m中并在NSLog()之前添加一个断点

    (BOOL)application:(UIApplication *)application  
    
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSLog(@"%@",[paths objectAtIndex:0]);
     }
    

或者在 Swift 中:

let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
print(paths[0])

2.打开 Finder->Go -> 转到文件夹并粘贴从步骤 1 复制的路径

3.啊!!!你在你的目的地。

【讨论】:

  • 对于 swift3 使用:NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
【解决方案4】:

如果您的应用使用 Core Data,只需在终端中搜索 sqlite 文件即可:

find ~ -name app_db_file_name.sqlite

结果将列出包含您的应用的模拟器文件夹的完整路径。

【讨论】:

  • @AlexWei 我希望 Apple 在“文件”菜单上添加一个按钮到“在 finder 中显示模拟器文档文件夹”或类似的东西。考虑到他们不断改变存储文件的位置,它仍然不存在似乎很荒谬......
  • 如果其他人有兴趣,我将此命令作为别名添加到我的 .profile 中:alias myapp_simulator_db="find ~/Library/Developer/CoreSimulator/Devices -name MyApp.sqlite"。当您需要重复运行此命令时,它很方便。
  • sudo find ~ -name app_db_file_name.sqlite 帮了我
【解决方案5】:

我破解了这个单行代码 (Gist): find ~/Library/Developer/CoreSimulator/Devices/ -name device.plist -exec sh -c "/usr/libexec/PlistBuddy -c \"print UDID\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print name\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print runtime\" '{}' | sed -n 's/com\.apple\.CoreSimulator.SimRuntime\.\(.*\)/\1/p'" \;

打印出来:

14F313C8-3813-4E38-903E-2010C136B77B iPad Retina iOS-8-0
1F6B82A2-C467-479A-8CAF-074BE507AC8E iPad Air iOS-8-0
2DA83944-BE5D-4342-B330-08F67A932D8C iPad 2 iOS-7-1
48703432-A5C5-4606-9369-0D21B53EB1E8 iPhone 4s iOS-7-1
4AFB71CC-6752-4F9A-A239-4DC9CA53A8B8 iPhone 5s iOS-8-0
53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60 iPhone 5 iOS-7-1
6B97C174-5914-4E89-8D17-943F0E2703BA iPhone 5 iOS-8-0
6C2DF3E9-FA26-4391-8B66-72E1467D6297 iPad 2 iOS-8-0
7F85E299-A3C2-4704-8B44-2984F6F995F5 iPad Retina iOS-7-1
8B9EDFFD-2240-476B-88AD-06ABE8F9FF51 iPhone 6 Plus iOS-8-0
97691E5D-5C38-4875-8AA7-C2B1E4ABCBB5 Resizable iPhone iOS-8-0
9BBF3408-6CA4-4CE0-BD4E-B02001F1262B iPhone 5s iOS-7-1
C9237847-F0AA-44BC-A74E-C08C2E0F7A6C Resizable iPad iOS-8-0
CC44C1BA-F39C-4410-AE34-4ABBD7806D45 iPad Air iOS-7-1
CDF4D811-5011-4464-8291-5CDA378375EA iPhone 6 iOS-8-0
E77DE00C-E244-4F25-A5E2-E6581614D5A2 iPhone 4s iOS-8-0

更新:

正如有人指出here,也可以运行xcrun simctl list devices 得到类似的结果:

== Devices ==
-- iOS 7.0 --
-- iOS 7.1 --
    iPhone 4s (48703432-A5C5-4606-9369-0D21B53EB1E8) (Shutdown)
    iPhone 5 (53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60) (Shutdown)
    iPhone 5s (9BBF3408-6CA4-4CE0-BD4E-B02001F1262B) (Shutdown)
    iPad 2 (2DA83944-BE5D-4342-B330-08F67A932D8C) (Shutdown)
    iPad Retina (7F85E299-A3C2-4704-8B44-2984F6F995F5) (Shutdown)
    iPad Air (CC44C1BA-F39C-4410-AE34-4ABBD7806D45) (Shutdown)
-- iOS 8.1 --
    iPhone 4s (0763EF65-DD0D-4FAD-84C7-2DE63D416526) (Shutdown)
    iPhone 5 (868ED444-8440-4115-AF37-F419CC682D2F) (Shutdown)
    iPhone 5s (E0455E5D-7315-4EC8-B05E-76284728244C) (Shutdown)
    iPhone 6 Plus (72554908-FF99-4B8F-9B87-65255ED08CFC) (Shutdown)
    iPhone 6 (32AA8133-53A4-4BE0-8CE5-0C7A87E81CAF) (Shutdown)
    iPad 2 (4AF84DE8-CBA2-47AE-A92A-0C0CEF9F41F8) (Booted)
    iPad Retina (69238B44-AAFD-4CD5-AAEA-C182D0BC300D) (Shutdown)
    iPad Air (E580AD99-0040-4EC1-B704-0C85567E6747) (Shutdown)
    Resizable iPhone (32E872FC-6513-41AB-A5B9-B23EB7D10DC8) (Shutdown)
    Resizable iPad (99997922-4A9F-4574-9E3E-EF45F893F4A2) (Shutdown)

【讨论】:

    【解决方案6】:

    如果您使用 Swift,这将返回文档目录的绝对路径:

    func applicationDirectoryPath() -> String {
        return NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as String
    }
    

    【讨论】:

    • 应该命名为“func documentDirectoryPath()” 你要去哪里...
    【解决方案7】:

    我编写了一个 bash 脚本,用于在模拟器中查找应用程序文件夹和应用程序数据文件夹的位置,您可以下载它here。解压缩脚本后,您可以导航到脚本所在的文件夹并使用它。如果您在没有任何选项的情况下调用它,它将为您提供已安装的 iOS 模拟器列表。然后,您可以使用这些选项来查找您的程序。写作:

    ./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a <MyApp>
    

    将在 iPad Air iOS 8 模拟器上找到您的应用程序的应用程序文件夹和主区域文件夹。这是一个例子:

    MacBook-Air:_posts user$ ./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a MyApp
    App folder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Bundle/Application/8F64CD7F-A227-43D6-98AC-41D3919827CB
    dataFolder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Data/Application/96C40A21-5A5C-4399-839C-B155B8A72932
    

    更新

    对原始脚本进行了更新,允许您使用 -d 选项根据设备类型进行搜索。我还编写了另一个脚本,它创建了一系列合理命名的文件夹,以便您可以找到您的应用程序和应用程序文档。 This script 将在您的主区域创建一个名为 iOS_SIMULATORS 的文件夹,您可以从那里轻松导航到您的应用程序。

    【讨论】:

    • 完美,我编辑了您的脚本以制作另一个脚本,重新初始化某个应用程序的所有模拟器数据。非常感谢詹姆斯!
    • 谢谢!常见 PITA 的绝佳解决方案。
    【解决方案8】:

    我能够通过下一个控制台输出找到模拟器文件夹:

    NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    

    在我的情况下是(Xcode 6 beta)

    app dir: file:///Users/user/Library/Developer/CoreSimulator/Devices/D00C56D4-DDA3-47B0-9951-27D3B9EC68E8/data/Applications/6ABF3E54-37F5-4AD1-A223-F7467F601FB6/Documents/
    

    【讨论】:

      【解决方案9】:

      根据 Michaels 的回答,这是针对 Swift 3 的

          func applicationDirectoryPath() -> String {
              return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String
          }
      

      【讨论】:

      • 这里唯一的解决方案!
      【解决方案10】:

      对于 Swift 3.0

      let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
      print(paths[0])
      

      您可以在 Xcode 8.2 中获取 Coredata 的位置

      【讨论】:

        【解决方案11】:

        Xcode 的新更新后,我发现 sql 文件现在存储在新文件夹中这里:

        ~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Library/Application Support/

        在存储在 Documents 文件夹之前:

        ~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Documents/

        【讨论】:

          【解决方案12】:

          对于 SWIFT 3:

          将此代码复制粘贴到didFinishLaunchingWithOptions

           print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).last! as String)
          

          【讨论】:

          • 这对我有帮助。但是当我尝试通过终端转到该路径时,它说:没有这样的文件或目录,但是当我尝试转到文件夹选项时,它实际上存在。
          • 这在 OSX 上对我有用。我需要在名为 的“应用程序支持”目录中再转到 1 个目录来完善 .sqlite 文件。
          【解决方案13】:

          对于 swift 3

          print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).last! as String)
          

          【讨论】:

            【解决方案14】:

            James Snook 一样,我创建了自己的脚本,以便更轻松地访问模拟器应用程序。我认为这对很多人来说都很方便,除了我。

            与他的脚本不同,我的脚本不是搜索工具,它创建了一个包含所有设备/运行时的完整(和人类可读的)文件夹结构,并在其中放置了指向应用程序的软链接。

            你可以得到它in this Gist

            每次在模拟器中安装应用程序时运行它,或者在每次出于任何原因获取应用程序时运行它(它会更新,并在 Finder 中打开设备文件夹)。

            【讨论】:

            • 你可以调整这个脚本来自动化一些事情。但我必须说,如果您只想访问应用程序文件夹,我刚刚发现的 this GUI app 听起来是一个非常有用的选择:)
            • 这也很好,但我更喜欢 James Snook 发布的第二个脚本,因为它也创建了指向数据目录的软链接。
            【解决方案15】:

            如果你没有指定任何目录,那么你可以使用下面的代码来打印默认目录:

            打印(NSPersistentContainer.defaultDirectoryURL())

            【讨论】:

              【解决方案16】:

              swift 4.x

              您可以从您的 NSPersistentContainer 描述中可靠地获取它。

              for description in container.persistentStoreDescriptions {
                  print("db location: \(description.url!)")
              }
              

              【讨论】:

                【解决方案17】:

                对于iOS 10.0+,您可以使用 persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

                我已经创建了实用功能,可以将 sqlite 文件复制到您想要的位置(仅适用于模拟器)。

                你可以像这样使用它

                import CoreData
                
                
                let appDelegate = UIApplication.shared.delegate as! AppDelegate
                UTility.getSqliteTo(destinationPath: "/Users/inderkumarrathore/Desktop", persistentContainer: appDelegate.persistentContainer)
                

                如果您已经访问过 sqlite、shm 和 wal 文件,则在终端中运行命令将 WAL 文件合并到 sqlite 文件中。

                $ sqlite3 persistentStore
                sqlite> PRAGMA wal_checkpoint;
                Press control + d
                

                运行上述命令后,您可以在 sqlite 文件中看到数据。


                这里是的实用方法的定义

                /**
                 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
                 @param destinationPath Path where sqlite files has to be copied
                 @param persistentContainer NSPersistentContainer
                */
                public static func getSqliteTo(destinationPath: String, persistentContainer: NSPersistentContainer) {
                  let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url
                
                  let sqliteFileName = storeUrl!.lastPathComponent
                  let walFileName = sqliteFileName + "-wal"
                  let shmFileName = sqliteFileName + "-shm"
                  //Add all file names in array
                  let fileArray = [sqliteFileName, walFileName, shmFileName]
                
                  let storeDir = storeUrl!.deletingLastPathComponent()
                
                  // Destination dir url, make sure file don't exists in that folder
                  let destDir = URL(fileURLWithPath: destinationPath, isDirectory: true)
                
                  do {
                    for fileName in fileArray {
                      let sourceUrl = storeDir.appendingPathComponent(fileName, isDirectory: false)
                      let destUrl = destDir.appendingPathComponent(fileName, isDirectory: false)
                      try FileManager.default.copyItem(at: sourceUrl, to: destUrl)
                      print("File: \(fileName) copied to path: \(destUrl.path)")
                    }
                  }
                  catch {
                    print("\(error)")
                  }
                  print("\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n")
                  print("In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in \(sqliteFileName) file")
                  print("\n-------------------------------------------------")
                  print("$ cd \(destDir.path)")
                  print("$ sqlite3 \(sqliteFileName)")
                  print("sqlite> PRAGMA wal_checkpoint;")
                  print("-------------------------------------------------\n")
                  print("Press control + d")      
                }
                

                对于

                /**
                 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
                 @param destinationPath Path where sqlite files has to be copied
                 @param persistentContainer NSPersistentContainer
                 */
                + (void)copySqliteFileToDestination:(NSString *)destinationPath persistentContainer:(NSPersistentContainer *)persistentContainer {
                  NSError *error = nil;
                  NSURL *storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.firstObject.URL;
                  NSString * sqliteFileName = [storeUrl lastPathComponent];
                  NSString *walFileName = [sqliteFileName stringByAppendingString:@"-wal"];
                  NSString *shmFileName = [sqliteFileName stringByAppendingString:@"-shm"];
                  //Add all file names in array
                  NSArray *fileArray = @[sqliteFileName, walFileName, shmFileName];
                
                  // Store Directory
                  NSURL *storeDir = storeUrl.URLByDeletingLastPathComponent;
                
                  // Destination dir url, make sure file don't exists in that folder
                  NSURL *destDir = [NSURL fileURLWithPath:destinationPath isDirectory:YES];
                
                  for (NSString *fileName in fileArray) {
                    NSURL *sourceUrl = [storeDir URLByAppendingPathComponent:fileName isDirectory:NO];
                    NSURL *destUrl = [destDir URLByAppendingPathComponent:fileName isDirectory:NO];
                    [[NSFileManager defaultManager] copyItemAtURL:sourceUrl toURL:destUrl error:&error];
                    if (!error) {
                      RLog(@"File: %@ copied to path: %@", fileName, [destUrl path]);
                    }
                  }
                
                
                  NSLog(@"\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");
                  NSLog(@"In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in %@ file", sqliteFileName);
                  NSLog(@"\n-------------------------------------------------");
                  NSLog(@"$ cd %@", destDir.path);
                  NSLog(@"$ sqlite3 %@", sqliteFileName);
                  NSLog(@"sqlite> PRAGMA wal_checkpoint;");
                  NSLog(@"-------------------------------------------------\n");
                  NSLog(@"Press control + d");
                }
                

                【讨论】:

                  【解决方案18】:

                  斯威夫特 4.2

                  let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
                          print(paths[0])
                  

                  【讨论】:

                    【解决方案19】:

                    斯威夫特 4.2

                    我为NSPersistentStoreDescription创建了一个扩展

                    import CoreData
                    
                    extension NSPersistentStoreDescription {
                        func getDatabaseLocation() -> String? {
                            return self
                                .url?
                                .absoluteString
                                .replacingOccurrences(of: "file://", with: "") // Remove file suffix
                                .replacingOccurrences(of: "%20", with: "\\ ") // Make the spaces to support terminal paste
                        }
                    }
                    

                    然后我在初始化NSPersistentContainer时使用它

                    lazy var persistentContainer: NSPersistentContainer = {
                    
                            let container = NSPersistentContainer(name: "CoreDataDemo")
                            
                            container.loadPersistentStores(completionHandler: { (storeDescription, error) in
                                
                                #if DEBUG
                                debugPrint(storeDescription.getDatabaseLocation() ?? "No database location")
                                #endif
                                
                                if let error = error as NSError? {
                                    assertionFailure("Unresolved error \(error), \(error.userInfo)")
                                }
                            })
                            
                            return container
                        }()
                    

                    【讨论】:

                      【解决方案20】:

                      斯威夫特 4.x

                          let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
                          print(paths[0])
                      

                      【讨论】:

                        【解决方案21】:

                        Swift 3.x

                        在您的 AppDelegate 文件中找到 didFinishLaunchingWithOptions 函数并将此代码粘贴到那里。

                        let path = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
                        print("\(path)")
                        

                        【讨论】:

                          【解决方案22】:

                          您可以使用以下代码。

                             func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                              // Override point for customization after application launch.
                              **print(persistentContainer.persistentStoreDescriptions)**
                              return true
                          }
                          

                          它将打印核心数据持久存储的位置,即 sqlite

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2011-01-11
                            • 1970-01-01
                            • 2013-12-15
                            • 2010-11-25
                            • 1970-01-01
                            相关资源
                            最近更新 更多