精华内容
下载资源
问答
  • 如果使用命令行删除,则会提示“无法删除文件夹 XXX,目录不是空的。”。 本文将介绍其原因并提供解决方案。 本文内容删除文件夹遭到拒绝解决方案 删除文件夹遭到拒绝 有时我们在删除一个很普通的文件夹时,会提示...

    在日常使用 Windows 10 时,有时会遇到删除很普通的文件夹时提示“访问被拒绝”,以管理员权限重试后依然提示没有权限。如果使用命令行删除,则会提示“无法删除文件夹 XXX,目录不是空的。”。

    本文将介绍其原因并提供解决方案。


    删除文件夹遭到拒绝

    有时我们在删除一个很普通的文件夹时,会提示需要提升权限才能删除。

    在这里插入图片描述
    ▲ 需要提升权限

    其实按照经验,这种问题与权限并没有什么关系。尤其是以上这种 NuGet 缓存目录下的文件夹,和权限更是扯不上关系。

    所以其实点了“继续”也并没有什么左右,依然是没完没了的错误。

    需要访问权限
    ▲ 需要访问权限

    如果我 一层层进入到文件夹的里面,然后 先删除文件,再一层层 退出来删掉文件夹,那么这个文件夹就能被正常删除掉。

    这至少能说明,并没有文件或文件夹处于被占用的状态!!!

    所以这个时候我考虑使用命令行删除:

    在这里插入图片描述
    ▲ 使用命令行删除

    命令行删除时,给了一个错误提示:

    rd : Directory C:\Users\lvyi.nuget\packages\walterlv.package.demo\12
    .0.27-alpha\src\Demo_\MagicalDemo_\Magical_ cannot be removed
    because it is not empty.

    意思是说,命令行在删除其中一个子文件夹的时候出错,原因是:“目录不是空的。”

    如果继续翻看下面的错误提示,发现这是一个按文件夹递归的提示。

    解决方案

    在网上搜索“目录不是空的”能得到不少结果,而且提供了不少解决方案:

    然而,无论敲入什么样的命令,都没有用。这时我抱着试一试的心态去搜索框(小娜)中搜索“资源监视器”或直接输入 resmon 命令打开资源监视器。在“关联的句柄”中我输入了无法删除的文件夹名称,才终于找到了根本原因:

    资源监视器
    ▲ 资源监视器

    结束掉可能用到了这个版本 NuGet 包的 Visual Studio 后,文件夹可以被正常删除掉了。

    删除文件夹
    ▲ 因为删除太快,好不容易抓到的一张图

    所以什么“需要管理员权限”啊,什么“目录不是空的”,都是假的!!!真正的原因还是文件夹被占用。


    我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

    如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

    展开全文
  • 来看一张图,了解一下文件名之前的这些标识符含义吧,以bit_code为例:可以看到,新建的dir目录对于所有用户都没有rwx的权限,那么现在,我们来cd一下dir看是否能够进去。毫无意外,无访问权限。 下面我给用户加上r...

    首先进入用户目录cd ~,新建一个目录文件dir,并修改其权限掩码为000。mkdir dir chmod 000 dir

    如下图

    这里写图片描述

    其中蓝色的表示文件名。来看一张图,了解一下文件名之前的这些标识符含义吧,以bit_code为例:

    这里写图片描述

    可以看到,新建的dir目录对于所有用户都没有rwx的权限,那么现在,我们来cd一下dir看是否能够进去。

    这里写图片描述

    毫无意外,无访问权限。
    下面我给用户加上r读权限看是否可以访问

    这里写图片描述
    还是无权限,再来看看写权限w如何

    这里写图片描述

    那么可执行权限x呢?

    这里写图片描述

    竟然进去了,是不是有些出乎意料呢?
    进入一个目录需要的是可执行权限x!!!

    那么来看看只有x权限,能不能显示dir目录下的内容呢?

    这里写图片描述

    又是无权限,这就尴尬了。来加上r权限看看

    这里写图片描述

    可见,进入用户目录需要的是x权限,而显示目录文件需要的是r权限。

    那么w权限是用来干嘛的呢?会不会是对文件进行增删操作所需的权限呢?
    来看例子

    这里写图片描述

    当dir没有w权限的时候,是无法在dir目录下创建文件的。
    下面,我给dir加上w权限

    这里写图片描述

    如此一来,就ok啦。

    删除操作也是需要w权限的哦!

    再来看看超级用户root如何?

    这里写图片描述

    在root权限下可以直接进入没有任何权限的目录,来看看显示以及增删文件是否也不需要权限呢?

    这里写图片描述

    结果还真是,可见root的确是超级啊。

    小结

    • 普通用户权限下,若想要cd进入一个目录,则需要该用户具有对该目录的可执行权限x。而显示该目录下的文件,则需要r读权限。对其目录下文件进行增删等操作时需要的是w写权限
    • 超级用户root权限下,不需要任何权限,即可直接对用户目录进行操作。
    展开全文
  • Android 文件外/内部存储的获取各种存储目录路径

    万次阅读 多人点赞 2018-06-12 14:51:50
    其中/storage/emulated/0目录就是机身存储的外部存储路径  而/storage/B3E4-1711/就是SD卡的路径  他们统称为外部存储  访问外部存储的API方法:  1、Environment.getExternalStorageDirectory()....

    前言

        对于任何一个应用来说,无论是PC端应用还是Android应用,存储肯定是必不可少的。对于很多做Android开发的同学来说,可能认为文件存储很简单,调用一些诸如getFilesDir,getExternalStorageDirectory方法行了,但是虽然说它们会调用相应的方法来实现简单的数据存储。但是他们未必就搞懂了他的数据到底存在了哪里,以及他的数据是否存对了地方,或者是否做好了版本兼容。下面我将从这几个地方来解答大家常见的困惑。

    目录:

    • Android中内部存储,外部存储的概念 ;
    • getDataDirectory,getFilesDir,getCacheDir,getDir,getExternalStorageDirectory,getExternalStoragePublicDirectory,getExternalFilesDir,getExternalCacheDir,getExternalCacheDir,getRootDirectory等方法区别联系 。
    • 清除数据和清除缓存到底清除了什么数据 ;
    • /storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系 ;
    • 一张图看懂Ram,Rom,以及扩展存储(TF卡)的区别;内部存储,外部存储的区别。


    一、Android中内部存储,外部存储的概念

    (1)内部存储 

    概念:注意内部存储不是内存。内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。从技术上来讲如果你在创建内部存储文件的时候将文件属性设置成可读,其他app能够访问自己应用的数据,前提是他知道你这个应用的包名,如果一个文件的属性是私有(private),那么即使知道包名其他应用也无法访问。 内部存储空间十分有限,因而显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作。 

    访问内部存储的API方法: 

    1、Environment.getDataDirectory() 
    2、getFilesDir().getAbsolutePath() 
    3、getCacheDir().getAbsolutePath() 

    4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() 


    (2)外部存储 

    概念:最容易混淆的是外部存储,因为老的Android系统的跟新的Android系统是有差别的,很多人去网上查找资料,看了一下以前的资料,又看了一下现在的资料,但是发现它们说法不一样然后就困惑了。首先说一个大家普遍的概念“如果在pc机上是区分外部存储和内部存储的话,那么电脑自带的硬盘算是内部存储,U盘或者移动硬盘就是外部存储了。”因此很多人带着这样的理解去看待安卓手机,把内置存储(机身存储)当做内部存储,而把扩展的SD卡当做是外部存储。这么认为确实没错,因为在4.4(API19)以前的手机上确实是这样的,手机自身带的存储卡就是内部存储,而扩展的SD卡就是外部存储。但是从4.4的系统开始,很多的中高端机器都将自己的机身存储扩展到了8G以上,比如有的人的手机是16G的,有的人的手机是32G的,但是这个16G,32G是内部存储吗,不是的!!!,它们依然是外部存储,也就是说4.4系统及以上的手机将机身存储存储(手机自身带的存储叫做机身存储)在概念上分成了”内部存储internal” 和”外部存储external” 两部分。既然16G,32G是外部存储,那有人又有疑惑了,那4.4系统及以上的手机要是插了SD卡呢,SD卡又是什么呢,如果SD卡也是外部存储的话,那怎么区分机身存储的外部存储跟SD卡的外部存储呢?对,SD卡也是外部存储,那怎么区分呢,在4.4以后的系统中,API提供了这样一个方法来遍历手机的外部存储路径: 

    File[] files;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
        for(File file:files){
            Log.e("main",file);
        }
    }

    如果你的手机插了SD卡的话,那么它打印的路径就有两条了,例如我的华为荣耀7插了SD卡,它的结果如下: 

    /storage/emulated/0/Android/data/packname/files/mounted 
    /storage/B3E4-1711/Android/data/packname/files/mounted 
    其中/storage/emulated/0目录就是机身存储的外部存储路径 
    而/storage/B3E4-1711/就是SD卡的路径 
    他们统称为外部存储 
    访问外部存储的API方法: 
    1、Environment.getExternalStorageDirectory().getAbsolutePath() 
    2、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath() 
    3、getExternalFilesDir(“”).getAbsolutePath() 
    4、getExternalCacheDir().getAbsolutePath() 

        

        大家对Android的外部存储会产生疑问,主要是现在很多的手机已经从物理上看不到外部存储了,以前的手机都有,就是那种黑色的内存卡,8G,16G,32G的,可以像U盘一样插拔,以前很流行,存储空间不够了,就去买个内存卡(准确说是SD卡,说成内存卡又会引起误解)回来,后来的手机比如现在我用的华为荣耀7,厂家已经把机身存储扩展到了16G了,只是在存储概念上了分为了内部存储(内部internal)和外部存储(外部external),其实它们都集成在一起了。当然如果你觉得16G不够用,那他支持通过插SD卡来扩充容量吗?支持的,荣耀7为例,它是三合二卡槽。卡槽1:Nano SIM卡;卡槽2:Nano SIM卡或Micro SD卡。默认卡槽1为4G主卡,可以在设置中更改4G主卡卡槽;不支持热插拔,插拔卡托后需重启手机。这样插入的SD卡也属于外部存储。所以手机的外部存储可能包含两部分,一是机身存储的外部存储部分,还有一个是SD卡部分。


    二、getDataDirectory,getFilesDir,getCacheDir,getDir,getExternalStorageDirectory,getExternalStoragePublicDirectory,getExternalFilesDir,getExternalCacheDir,getExternalCacheDir,getRootDirectory的区别和联系

    上面这些方法,我们可能似曾相识,但是对于有些同学来说却又很难分清出,主要还是不同的Android版本的问题。为了方便大家理解,我先简要介绍以上各个方法,为方便大家理解我把这些方法的结果打印出来(以下的打印结果是基于荣耀7的(系统版本6.0): 
    1、Environment.getDataDirectory() = /data 
    这个方法是获取内部存储的根路径 
    2、getFilesDir().getAbsolutePath() = /data/user/0/packname/files 
    这个方法是获取某个应用在内部存储中的files路径 
    3、getCacheDir().getAbsolutePath() = /data/user/0/packname/cache 
    这个方法是获取某个应用在内部存储中的cache路径 
    4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() = /data/user/0/packname/app_myFile 
    这个方法是获取某个应用在内部存储中的自定义路径 
    方法2,3,4的路径中都带有包名,说明他们是属于某个应用 
    ………………………………………………………………………………………… 
    5、Environment.getExternalStorageDirectory().getAbsolutePath() = /storage/emulated/0 
    这个方法是获取外部存储的根路径 
    6、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath() = /storage/emulated/0 
    这个方法是获取外部存储的根路径 
    7、getExternalFilesDir(“”).getAbsolutePath() = /storage/emulated/0/Android/data/packname/files 
    这个方法是获取某个应用在外部存储中的files路径 
    8、getExternalCacheDir().getAbsolutePath() = /storage/emulated/0/Android/data/packname/cache 
    这个方法是获取某个应用在外部存储中的cache路径 


    注意:其中方法7和方法8如果在4.4以前的系统中getExternalFilesDir(“”)和getExternalCacheDir()将返回null,如果是4.4及以上的系统才会返回上面的结果,也即4.4以前的系统没插SD卡的话,就没有外部存储,它的SD卡就等于外部存储;而4.4及以后的系统外部存储包括两部分,getExternalFilesDir(“”)和getExternalCacheDir()获取的是机身存储的外部存储部分,也即4.4及以后的系统你不插SD卡,它也有外部存储,既然getExternalFilesDir(“”)和getExternalCacheDir()获取的是机身存储的外部存储部分,那么怎么获取SD卡的存储路径呢,还是通过上面提到的getExternalFilesDirs(Environment.MEDIA_MOUNTED)方法来获取了,不知道Android有没有提供相关的API接口来获取SD卡的存储路径,大家可以去查资料。又重复了上面的话,主要是提醒大家要注意不同的Android版本是有差别的,这个最坑了。 

    ………………………………………………………………………………………… 
    Environment.getDownloadCacheDirectory() = /cache 
    Environment.getRootDirectory() = /system 
    这两个方法没什么说的了,每个版本的android系统都一样 
    ………………………………………………………………………………………… 
    从上面我们很清楚的可以看到上面的方法可以分为三类,我用横线隔开了。第一类是位于根目录/data下;还有一类是位于根目录/storage下,可以看到调用它们的API方法都带了一个External;另外一类不在/data下也不再/storage下,比如系统文件/system,或者缓存文件/cache。 
    /data目录下的文件物理上存放在我们通常所说的内部存储里面 
    /storage目录下的文件物理上存放在我们通常所说的外部存储里面 
    /system用于存放系统文件,/cache用于存放一些缓存文件,物理上它们也是存放在内部存储里面的 


    下面来看一下大家常见的疑问 

    疑问1、那getFilesDir().getAbsolutePath()和getCacheDir().getAbsolutePath()有什么区别呢? 
    其实是没有什么区别的,我们可以看下面一张图: 
    这里写图片描述 
    getFilesDir获取的是files目录,getCacheDir获取的是cache目录,它们位于同一级目录,只是为了用来存放不同类型的数据的,由文件名不难看出:cache下存放缓存数据,databases下存放使用SQLite存储的数据,files下存放普通数据(log数据,json型数据等),shared_prefs下存放使用SharedPreference存放的数据。这些文件夹都是由系统创建的。 


    疑问2、getFilesDir().getAbsolutePath()和getExternalFilesDir(“”).getAbsolutePath()有什么区别呢? 

    我们先看它们的路径: 
    /data/user/0/packname/files 
    /storage/emulated/0/Android/data/packname/files 
    很显然这两个的区别是一个在内部存储里面,一个在外部存储里面,这是它们的区别。它们的共同点呢,就是它们的路径都带有包名,表明是这个APP的专属文件,这类文件应该是随着app卸载而一起被删除的,并且我们在设置里面清除该应用的数据时,这两个文件夹下的数据都会被清除。 
    疑问3、什么是APP专属文件? 
    上面疑问2我们提到了专属文件,所谓专属文件就是它是属于某个具体的应用的,他的文件路径都带有相应的包名,当APP卸载时,它们会随应用一起删除,当我们在设置里面手动清除某个应用数据时(不是清除缓存),它们也会一起被清掉。Android使用这种专属文件的目的就是为了方便文件管理,避免文件随意存储,显得很乱,另一个目的就是为了当应用被卸载时不会留下很多垃圾文件。 
    疑问4、既然内部存储与外部存储都有APP专属文件,那么我们该使用哪个呢? 

    内部存储与外部存储都有APP专属文件,我们该用哪个呢,很显然应该用外部存储的,因为内部存储本身就比较小,而且已经存储了一些系统的文件,因此内部存储我们尽量不要去使用。但是当手机没有外部存储时,我们还是得使用内部存储,一般程序员会做判断是否有外部存储,没有再使用内部存储,代码如下: 

    public static String getFilePath(Context context,String dir) {
        String directoryPath="";
        if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ) {//判断外部存储是否可用 
            directoryPath =context.getExternalFilesDir(dir).getAbsolutePath();
            }else{//没外部存储就使用内部存储  
            directoryPath=context.getFilesDir()+File.separator+dir;
            }
            File file = new File(directoryPath);
            if(!file.exists()){//判断文件目录是否存在
            file.mkdirs();
            }
        return directoryPath;
    }
    为了让大家更好地理解不同版本的Android系统的存储差异我做了下列一份说明表: 

    比较的是我向getFilesDir().getAbsolutePath()路径下和getExternalFilesDir(“”).getAbsolutePath()路径各写入19.48M数据前后的差别 
    表一、4.1.1系统,带有SD卡 (真机)

    存储位置获取路径的方法容量(写入前)容量(写入后)备注
    /data/data/packname/filesgetFilesDir()1.59GB1.57GB内部存储
    /storage/sdcard0/Android
    /data/packname/files
    getExternal
    StorageDirectory()
    1.47GB1.45GB外部存储(SD卡)

    表二、4.1.1系统,不带有SD卡 (真机)

    存储位置获取路径的方法容量(写入前)容量(写入后)备注
    /data/data/packname/filesgetFilesDir()1.59GB1.47GB内部存储
    路径不存在getExternal
    StorageDirectory()
    ~~~~~~没插SD卡

    表三、4.2.1系统,带有SD卡 (模拟器)

    存储位置获取路径的方法容量(写入前)容量(写入后)备注
    /data/data/packname/filesgetFilesDir()1.85GB1.83GB内部存储
    /mnt/sdcard/Android
    /data/packname/files
    getExternal
    StorageDirectory()
    98.42MB78.93MB外部存储(SD卡)

    表四、4.4.2系统,带有SD卡 (真机)

    存储位置获取路径的方法容量(写入前)容量(写入后)备注
    /data/data/packname/filesgetFilesDir()2.22GB2.18GB内部存储
    /storage/emulated/0/Android
    /data/packname/files
    getExternal
    StorageDirectory()
    2.20GB2.16GB机身外部存储
    /storage/sdcard1getExternalFilesDirs1.47GB1.47GB外部存储(SD卡
    没有向其写数据,只是读取)

    表五、4.4.2系统,不带有SD卡 (真机)

    存储位置获取路径的方法容量(写入前)容量(写入后)备注
    /data/data/packname/filesgetFilesDir()2.22GB2.18GB内部存储
    /storage/emulated/0/Android
    /data/packname/files
    getExternal
    StorageDirectory()
    2.20GB2.16GB机身外部存储

    表六、6.0.0系统,带有SD卡 (真机)

    存储位置获取路径的方法容量(写入前)容量(写入后)备注
    /data/user/0/packname/filesgetFilesDir()11.94GB11.90GB内部存储
    /storage/emulated/0/Android
    /data/packname/files
    getExternal
    StorageDirectory()
    11.92GB11.88GB机身外部存储
    /storage/B3E4-1711getExternalFilesDirs1.47GB1.47GB外部存储(SD卡)
    没有向其写数据,只是读取

    表七、6.0.0系统,不带有SD卡 (真机)

    存储位置获取路径的方法容量(写入前)/storage/容量(写入后)备注
    /data/user/0/packname/filesgetFilesDir()11.93GB11.89GB内部存储
    /storage/emulated/0/Android
    /data/packname/files
    getExternal
    StorageDirectory()
    11.91GB11.87GB机身外部存储

    注:上述容量指的是该路径所在根路径的可用容量,比如/data/data/packname/files的容量是指/data的可用容量,/storage/sdcard0/Android/data/packname/files指的是/storage/sdcard0的可用容量,而一般在4.4及以上的系统中,我们很少操作SD

    三、清除数据和清除缓存到底清除了什么数据

    这个很容易搞混,为什么呢?通过上面我们知道: 
    /data/user/0/packname/files它是用来存储普通数据的 
    /data/user/0/packname/cache它是用来存储缓存数据的 
    所以很多人就以为我清除数据时清除的肯定就是files下的数据,而我清除缓存数据时清除的肯定就是cache下的数据,但是事实却不是这样的。正确应该是: 
    清除缓存:我们知道应用程序在运行过程中需要经过很多过程,比如读入程序,计算,输入输出等等,这些过程中肯定会产生很多的数据,它们在内存中,以供程序运行时调用。所以清除缓存清除的是APP运行过程中所产生的临时数据。 
    清除数据:清除数据才是真正的删除了我们保存在文件中的数据(永久性数据,如果不人为删除的话会一直保存在文件中)例如当我们在设置里面清除了某个应用的数据,那么/data/user/0/packname/和/storage/emulated/0/Android/data/packname/下的文件里面的数据会全部删除,包括cache,files,lib,shared_prefs等等。

    四、/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系

    从上面的表中我们可以发现,在4.1系统中,getExternalStorageDirectory方法获取到的路径为/storage/sdcard0;4.2系统中getExternalStorageDirectory方法获取到的路径为/mnt/sdcard,因为4.2是模拟器打印的结果,如果是真机的话也是/storage/sdcard0;4.4的getExternalStorageDirectory方法获取到的路径为/storage/emulated/0,它的SD卡存储路径为/storage/sdcard1;6.0的getExternalStorageDirectory方法获取到的路径为/storage/emulated/0,它的SD卡存储路径为/storage/B3E4-1711;另外根据测试在4.0上getExternalStorageDirectory方法获取到的路径为/mnt/sdcard。所以在真机上,getExternalStorageDirectory获取到的路径如下表所示:

    系统版本结果
    4.0/mnt/sdcard
    4.1/storage/sdcard0
    4.2/storage/sdcard0
    4.4/storage/emulated/0
    6.0/storage/emulated/0

    要理解/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系,我们需要先要了解一下linux文件挂载的概念,关于挂载大家可以自行去百度。还有我们不明白为什么会有有/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0这么多目录,让人看起来眼花缭乱,要详细了解请仔细看下面的文章,下面的文章是我摘自关于android的4.2的0文件夹的详解 
    —- android 4.0 —- 
    在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd卡上,然而gn是没有sd卡的,所以google想了一个办法,就是虚拟一个。 
    所以,在userdata分区下有个目录叫media,是内置sd卡的数据存储位置,使用fuse技术将/data/media虚拟成为一个叫做/dev/fuse的设备,为了让程序能认出来,被同时挂载在 /mnt/sdcard 目录,又为了兼容以前的程序,做了一个快捷方式(linux系统里叫软连接) /sdcard 指向的是 /mnt/sdcard . 
    当然,这些都是4.0的做法。 
    —- android 4.1 —- 
    在4.1里,同样也会使用fuse技术,/dev/fuse 会被同时挂载到/storage/sdcard0 目录,这个sdcard0表示第一个sd卡(如果有外置sd卡,那会多一个 /storage/sdcard1,比如我的xoom), /sdcard 软连接会指向 /storage/sdcard0 ,此时/mnt/sdcard 也是个软连接,会指向/storage/sdcard0。 
    如果你通过otg线接U盘,会被挂载到 /storage/usb0目录,stickmount这个软件为了让图库、快图、mx player等软件,能看到u盘里的数据,又同时挂载到 /storage/sdcard0/usStorage/sda1. 
    也许你会问,为什么不是usb0,而是sda1,这是linux的对硬盘的命名方式,如果你的u盘有多个分区,就分别是sda1,sda2这样一直排下去了。 
    —- android 4.2 —- 
    好了,我们开始说4.2系统。 
    谷歌是不是没事干啊,非要给android搞个多用户,你想想啊,在中国,可能因为经济问题,家里不是每人一个电脑,在美国,几乎需要用电脑的人,都会自己有一台或多台,一台电脑多人用的情况少之又少,这就是为什么叫PC了,顾名思义,个人电脑。像手机和平板这些东西,更加私人化了,很少公用了吧,我想在中国也是如此吧。 
    当然,谷歌也不完全是抽风,因为他有更大的战略部署,而且平板也的确有多人用的可能。 
    所以谷歌搞出来一个多用户,那每个人的应用、数据、个性配置都要分开吧。 应用和个性配置好弄,想想啊,通过权限控制,每人只能看自己的应用就行了,桌面也可以用自己的。 
    那数据怎么办???? 
    好吧,调整用户数据的挂载结构。android 4.2,同样也会使用fuse技术/dev/fuse 会被挂载到/storage/emulated/0 目录,为什么是0呢,你还记得上边的sdcard0吧,第一个的意思。(如果有第二个,应该就是/storage/emulated/1,我们的三儿子没有外置sd卡,所以没法验证) 
    为了兼容以前,同时挂载到 /storage/emulated/legacy (故名思议,传统的),还建立三个软连接 /storage/sdcard0 ,/sdcard,/mnt/sdcard ,都指向 /storage/emulated/legacy 
    很多同学可能不会认真看上面,这里我就简单总结一下: 
    1、其中sdcard/、mnt/sdcard、storage/sdcard0、storage/emulated/0、storage/emulated/legacy都是同一个路径的不同”指针“,指向的是同一个地方,只是不同Android版本的叫法不一样。 
    2、如果大家想了解每个版本的外部存储路径,同学们可以通过获取getExternalStorageDirectory方法的打印结果进行对比

    五、一张图看懂Ram,Rom,以及扩展存储(TF卡)的区别;内部存储,外部存储的区别。

    这里写图片描述 
    1、首先我们来弄清几个概念,内存,内部存储,外部存储,机身存储(内置存储)。 
    1.1内存;我们在英文中称作memory,内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,所以说它是用于计算机运行时的,它不是用来存储数据的。 
    1.2内部存储,外部存储;内部存储我们称为InternalStorage,外部我们称为ExternalStorage,这两个概念来自于早期的Android智能机,4.4以前,内置存储就是内部存储,外置SD卡就是外置存储。我们通过getDataDirectory就可以获取内置存储根路径,通过getExternalStorageDirectory就可以获取外置SD卡根路径。4.4以后外部存储就包含两部分了,其中通过getExternalStorageDirectory获取的是机身存储的外部存储,而外置SD卡我们则需要通过getExternalDirs遍历来获取了。 
    1.3机身存储;机身存储是指手机自身携带的存储空间,出厂时就已经有了,4.4以前机身存储就是内部存储,4.4及以后机身存储包含了内部存储和外部存储。 
    2、Ram,Rom,以及扩展存储(TF卡)的概念。从图中我们可以看到,一个手机里面有内存,手机内置存储,以及SD卡, 它们分别是Ram,Rom,以及TF卡,这三种卡的性能,材质及价格都不一样,都有各自的用处。 
    3、内部存储,外部存储的概念。很多人对这个存在误解,认为机身存储就是内存,而SD卡才叫外部存储,这其实是不对的,不同的Android版本是有差别的,请看第1条。 
    最后附上我的例子: 

    http://download.csdn.net/download/u010937230/9930396

    原文连接:https://blog.csdn.net/u010937230/article/details/73303034


    展开全文
  • Linux源码目录结构和Linux文件系统目录结构

    万次阅读 多人点赞 2018-03-14 18:03:34
    一、Linux源码的目录结构首先上一张截图,如下所示:再看各个文件的介绍,借用一下其他资源。arch:这个为目录是架构相关,里面存放了许多CPU架构,比如arm,x86,MIPS,PPC等,处理器原厂提供一套Linux内核的源码,...

    学习Linux也有一段时间了,具体来整理一下Linux源码的目录结构和文件系统的目录结构,以便加深记忆。

    一、Linux源码的目录结构

    首先上一张截图,如下所示:


    再看各个文件的介绍,借用一下其他资源。

    arch:这个为目录是架构相关,里面存放了许多CPU架构,比如arm,x86,MIPS,PPC等,

    处理器原厂提供一套Linux内核的源码,那么在这个目录下都有一套针对具体处理器CPU的子目录。每个CPU的子目录,又进一步分解为boot,mm,kernel等子目录,分别控制系统引导,内存管理,系统调用,动态调频,主频率设置部分等。
    在arch目录中有关键的平台文件。任何一款支持Linux的处理器,都有一部分内核代码是针对特定的处理器来提供的,具体的实现就是通过平台文件。
    迅为4412的平台文件,是arch→arm→mach-exynos→mach-itop4412.c。
    arch→arm→boot目录,默认编译生成的内核镜像是在这个目录下。
    在arch→arm→kernel目录中,有针对具体CPU处理器的代码,有相关内核特性实现方式,如信号处理等。这一部分当然是芯片厂商做好了,4412的这部分就是三星已经做好的部分。
    在arch→arm→lib目录中,有一些和硬件相关库函数,后面学习驱动的时候会使用到。

    在arch→arm→tools目录中,包含了生成镜像的工具。


    block:在linux中block表示块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡、iNand、Nand、硬盘等都是块设备。你几乎可以认为块设备就是存储设备。block目录下放的是一些linux存储体系中关于块设备管理的代码。

    crypto:英文意思是加密。这个目录下放了一些各种常见的加密算法的C语言代码实现。譬如crc32、md5、sha1等。

    Documentation:里面放了一些文档。

    drivers:驱动目录,里面分门别类的列出了linux内核支持的所有硬件设备的驱动源代码。就是需要重点学习的部分。

    firmware:固件。什么是固件?固件其实是软件,不过这个软件是固话到IC里面运行的叫固件:就像S5PV210里的iROM代码。

    fs:fs就是file system,文件系统,里面列出了linux支持的各种文件系统的实现。

    include:头文件目录,公共的(各种CPU架构共用的)头文件都在这里。每种CPU架构特有的一些头文件在arch/arm/include目录及其子目录下。

    init:init是初始化的意思,这个目录下的代码就是linux内核启动时初始化内核的代码。


    如下图所示,部分目录如下。下面的这些目录,几乎不需要我们去动其中任何一个文件。

    ipc:ipc就是inter process commuication,进程间通信,里面都是linux支持的IPC的代码实现。

    kernel:kernel就是内核,就是linux内核,所以这个文件夹下放的就是内核本身需要的一些代码文件。

    lib:lib是库的意思,这里面都是一些公用的有用的库函数,注意这里的库函数和C语言的库函数不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。譬如在内核中要把字符串转成数字用atoi,但是内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。
    mm:mm是memory management,内存管理,linux的内存管理代码都在这里。
    net:该目录下是网络相关的代码,譬如TCP/IP协议栈等都在这里。


    scripts:脚本,这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。我们并不会详细进入分析这个目录下的脚本,而是通过外围来重点学会配置和编译linux内核即可。
    security:安全相关的代码。不用去管。
    sound:音频处理相关的。
    tools:linux中用到的一些有用工具
    usr:目录下是initramfs相关的,和linux内核的启动有关,暂时不用去管。


    virt:内核虚拟机相关的,暂时不用管。
    Kbuild:Kbuild是kernel build的意思,就是内核编译的意思。这个文件就是linux内核特有的内核编译体系需要用到的文件。
    Makefile:这个是linux内核的总makefile,整个内核工程用这个Makefile来管理的。

    二、文件系统目录结构

    先上图,如下图所示:


    1、/-
    每一个文件和目录从根目录开始。

    只有root用户具有该目录下的写权限。请注意,/root是root用户的主目录,这与/.不一样

    2、/bin中 - 用户二进制文件

    包含二进制可执行文件。
    在单用户模式下,你需要使用的常见Linux命令都位于此目录下。系统的所有用户使用的命令都设在这里。

    例如:ps、ls、ping、grep、cp

    3、/sbin目录 - 系统二进制文件

    就像/bin,/sbin同样也包含二进制可执行文件。

    但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护。例如:iptables、reboot、fdisk、ifconfig、swapon命令

    4、/etc - 配置文件

    包含所有程序所需的配置文件。
    也包含了用于启动/停止单个程序的启动和关闭shell脚本。例如:/etc/resolv.conf、/etc/logrotate.conf

    hosts:设备名称(或域名)到ip地址的解析,相当于本地存在的dns功能。

    5、/dev - 设备文件

    包含设备文件。

    这些包括终端设备、USB或连接到系统的任何设备。例如:/dev/tty1、/dev/usbmon0

    6、/proc - 进程信息

    包含系统进程的相关信息。
    这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。

    这是一个虚拟的文件系统,系统资源以文本信息形式存在。例如:/proc/uptime

    7、/var - 变量文件

    var代表变量文件。
    这个目录下可以找到内容可能增长的文件。

    这包括 - 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp);

    8、/tmp - 临时文件

    包含系统和用户创建的临时文件。

    当系统重新启动时,这个目录下的文件都将被删除。

    9、/usr - 用户程序

    包含二进制文件、库文件、文档和二级程序的源代码。
    /usr/bin中包含用户程序的二进制文件。如果你在/bin中找不到用户二进制文件,到/usr/bin目录看看。例如:at、awk、cc、less、scp。
    /usr/sbin中包含系统管理员的二进制文件。如果你在/sbin中找不到系统二进制文件,到/usr/sbin目录看看。例如:atd、cron、sshd、useradd、userdel。
    /usr/lib中包含了/usr/bin和/usr/sbin用到的库。

    /usr/local中包含了从源安装的用户程序。例如,当你从源安装Apache,它会在/usr/local/apache2中

    10、/home - HOME目录

    所有用户用home目录来存储他们的个人档案。

    例如:/home/john、/home/nikita

    11、/boot - 引导加载程序文件

    包含引导加载程序相关的文件。
    内核的initrd、vmlinux、grub文件位于/boot下。

    例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic

    12、/lib - 系统库

    包含支持位于/bin和/sbin下的二进制文件的库文件.
    库文件名为 ld*或lib*.so.*

    例如:ld-2.11.1.so,libncurses.so.5.7

    13、/opt - 可选的附加应用程序

    opt代表可选的。
    包含从个别厂商的附加应用程序。

    附加应用程序应该安装在/opt/或者/opt/的子目录下。

    14、/mnt - 挂载目录

    临时安装目录,系统管理员可以挂载文件系统。15、/media - 可移动媒体设备
    用于挂载可移动设备的临时目录。
    举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy;16、/srv - 服务数据
    srv代表服务。
    包含服务器特定服务相关的数据。
    例如,/srv/cvs包含cvs相关的数据。


    展开全文
  • 【mysql】mysql删除重复记录并且只保留一条

    万次阅读 多人点赞 2018-09-03 21:10:13
    目录 一、单个字段的操作 分组介绍: 1. 查询全部重复的数据: 2. 删除全部重复试题: 3. 查询表中多余重复试题(根据depno来判断,除了rowid最小的一个) a. 第一种方法: b. 第二种方法: c. 补充第三种...
  • (一)文件层次结构 ...文件系统为用户提供与文件及目录有关的调用,如新建、打开、读写、关闭、删除文件,建立、删除目录等。此层由若干程序模块组成,每一模块对应一条系统调用,用户发出系统...
  • 一张PDF了解JDK9 GC调优秘籍-附PDF下载

    千次阅读 2020-06-30 06:50:24
    JDK9 GC调优秘籍,一张PDF就够了!
  • Linux根目录的建立

    千次阅读 2017-09-20 10:51:56
    所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。   对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与...
  • 返回目录 第三章 绘制地图 一 导入素材 点击进入 二 绘制一张简单地图 这一节我们来看如何绘制一张地图。 1 新建Grid与Tilemap 在Hierarchy面板中,点击Create/2D ...
  • thinksns 目录结构

    千次阅读 2013-06-18 16:49:10
    核心与服务、公共Model、插件、Widget、第三方类库共同构成了系统的大根基,其他所有应用都其上构建。 术语解释  核心:源自ThinkPHP框架,为系统提供MVC...位于/addons/services/目录,如邮件发送(Mail)、用户
  • 文件目录结构:单级、两级、多级(树形)和无环图目录结构 与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的信息,包括属性、 位置和所有权等,这些信息主要是由操作系统进行管理。首先我们来看目录...
  • linux内核源码目录

    千次阅读 2017-01-04 20:03:32
    2015年9月刚入学,就开始学习有关内核源码的知识,那时候定期...系统从boot开始动作,把内核从启动盘装到正确的位置,进行一些基本的初始化,如检测内存,保护模式相关,建立页目录和内存页表,GDT表,IDT表。然后进入m
  • MySQL删除操作

    千次阅读 2017-04-27 09:01:03
    修改和删除 一、实验介绍 1.1 实验内容 本节实验中,我们将学习并实践如何对数据库表和表中的内容做修改,删除,重命名等操作。 1.2 实验知识点 数据库操作数据表操作更新和删除数据 1.3 实验环境...
  • 目录一、连接二、多表删除一、join连接 连接条件 三种连接类型示意图 1、内连接:inner join mysql> select a.id,a.name from ceshi AS a inner join ceshi_two AS b on a.name = b.name;2、左外连接 mysql> select ...
  • MySQL文件目录格式及存放位置

    千次阅读 2015-09-10 09:00:50
    了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm文件跟数据库存储引擎无关,也...
  • CentOS 6的光盘目录及安装阶段说明

    千次阅读 2014-10-17 13:58:41
    其中BOOT目录下的BOOTX64.conf为grub的配置文件,用于显示引导菜单。 (3)TRANS.TBL文件:记录当前目录的列表,用mkisofs的-T参数重新生成,主要是为了长文件名称。 (4).discinfo文件是安装介质的识别
  • Discuz全版本任意文件删除漏洞

    千次阅读 2017-09-30 14:32:31
    Discuz全版本任意文件删除漏洞验证用的版本:discuz3.2 0x1首先在根目录下新建一个文件 0x2 构造poc1修改出生地区 注意其中的formhash需要替换掉,具体是在源码中找。 为什么这里要替换掉formhash呢? 一开始不...
  • LINUX 文件系统根目录 挂载点间的区别与联系

    万次阅读 多人点赞 2017-03-09 17:33:43
    一 、Linux文件结构 MQ 异常停止 ... Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。  /根目录
  • 解密:一张所有XP用户都感到吃惊的图片
  •  其实不用修改 grub.cfg,只要把个性化配置写入/etc/default/目录下的grub和/etc/gurb.d目录下的脚本文件,以后不管升级内核或者是升级grub所执行的update-grub,都会按要求创建个性化的grub.cfg。   1...
  • 如何新增更新和删除学生成绩记录--目录前言1.1 新增记录1.2更新记录3.删除记录小结 前言 在一个数据库中,特别是OLTP(On-Line Transaction Processing 联机事务处理过程)的系统中,数据路记录的增删改查几乎是时刻...
  • 转:...上周,我参加了公司的一门课程《网站性能优化》,讲师提出了一个问题:一张图片优化后减少5K,1年内可以大概省下多少宽带成本呢?非常好奇,仔细听完讲师分析,计算出来
  • 一张图深度解析Linux 共享内存的内核实现 Sailor_forever sailing_9806#163.com http://blog.csdn.net/sailor_8318/article/details/39484747 PDF版本下载链接  ...(本原创文章发表于Sailor_forever ...
  • java定时删除日志

    千次阅读 2017-09-28 18:04:01
    其中的Quartz管理工具 该类参考网络代码  package my.ceshi.data.deletelog; import java.text.ParseException; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Schedul
  • MySQL大表删除解决方案

    万次阅读 2017-06-20 13:56:30
    ITPUB 2017-06-19 16:51 一、表删除问题汇总 (1)、mysql如何删除表 (2)、删除大表如何优化、解决 二、删除表原理与优化 ...对于删除表的页面清除,只需要将页面从flash队列中删除即可,而不需要去做flush
  • centos-系统删除多余网卡的方法

    千次阅读 2017-09-18 09:46:00
    Centos系统更改网卡或网卡MAC地址后会出现个eth0.bak配置备份文件解决方法:/etc/sysconfig/networking/devices目录下,将ifcfg-eth0.bak删除/etc/sysconfig/networking/profiles/default,将ifcfg-eth0.bak删除/etc...
  • iis设置虚拟目录

    千次阅读 2009-07-22 09:05:00
    WinXP如何安装、卸载IIS和设置虚拟目录、默认文档及备份、恢复IIS2008-02-29 15:00 相对于PHP,安装IIS或者PWS是很容易的。IIS(WinNT平台下)和PWS(Win9X平台下)属同一事物,是ASP的开发平台、运行后台,也是服务器...
  • 问:有好几个200多M的ISO文件,都是启动盘,请问有什么简单一点的办法将它们合并在一张盘,而不影响各自的启动~~~也就是说启动的时候可以各自调用,看了论坛的一些帖知道EZB大概可以,但实际操作起来我还是很迷茫,...
  • 如果可以删除,说明程序可能调用到系统盘Windows->System32目录下的dll文件,建议删除或者更新该目录下的相关dll文件;如果不能删除,dll文件右键选择属性确认SDK库版本。 3. 如按上述步骤操作后还是不能...
  • thinksns 核心架构及目录结构

    千次阅读 2013-08-28 13:20:51
    核心与服务、公共Model、插件、Widget、第三方类库共同构成了系统的大根基,其他所有应用都其上构建。 术语解释  核心:源自ThinkPHP框架,为系统提供MVC分离...位于/addons/services/目录,如邮件发送(Mail)、用户

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,241
精华内容 26,496
关键字:

如何删除目录的其中一张