Linux 操作系统下 File.Delete 的表现

在我的上一篇随笔“对 File.Delete
方法的一点看法”中,在 Windows 操作系统上对 File.Delete 方法进行了测试。这次,在 Linux 操作系统上使用 mono 的最新版本
1.2.5 版对 File.Delete 方法进行测试。

下面是我的运行 Linux 操作系统的计算机的基本信息:

[email protected]:~/work$ cat /etc/issue.net

Ubuntu 6.10

[email protected]:~/work$ uname -rm

2.6.17-12-server i686

[email protected]:~/work$ mono --version

Mono JIT compiler version 1.2.5 (tarball)

Copyright (C) 2002-2007 Novell, Inc and Contributors. www.mono-project.com

TLS:           __thread

GC:            Included Boehm (with typed GC)

SIGSEGV:       normal

Architecture:  x86

Disabled:      none

[email protected]:~/work$ gmcs --version

Mono C# compiler version 1.2.5.0

[email protected]:~/work$ mono clrver.exe

操作系统版本      : Unix 2.6.17.12

公共语言运行库版本: 2.0.50727.42

[email protected]:~/work$

我们用下面的一段程序来测试 File.Delete 在 Linux 操作系统下的表现:

using System;

using System.IO;

sealed class Test

{

static void Main()

{

try

{

Console.Write("请输入要删除的文件名: ");

string fileName = Console.ReadLine();

if (fileName == "null") fileName = null;

if (fileName == "zero") fileName = "\0";

File.Delete(fileName);

Console.WriteLine("File.Delete 成功");

}

catch (Exception ex)

{

Console.WriteLine("错误: " + ex.ToString());

}

}

}

运行结果如下:

文件名 直接调用 File.Delete 方法

[email protected]:~/work$ mono test.exe

零长度字符串 请输入要删除的文件名:

错误: System.ArgumentException: path

at System.IO.File.Delete (System.String path) [0x00000]

at Test.Main (System.String[] args) [0x00000]

非法字符 请输入要删除的文件名: zero

错误: System.ArgumentException: path

at System.IO.File.Delete (System.String path) [0x00000]

at Test.Main (System.String[] args) [0x00000]

空引用 请输入要删除的文件名: null

错误: System.ArgumentNullException: Argument cannot be null.

Parameter name: path

at System.IO.File.Delete (System.String path) [0x00000]

at Test.Main (System.String[] args) [0x00000]

无效的路径 请输入要删除的文件名: none/a.txt

错误: System.IO.DirectoryNotFoundException: Destination directory not found: none

at System.IO.File.Delete (System.String path) [0x00000]

at Test.Main (System.String[] args) [0x00000]

文件名太长 请输入要删除的文件名: -this-string‘s-length-is-256-

错误: System.IO.PathTooLongException: Path is too long. Path: -this-string‘s-length-is-256-

at System.IO.Directory.Exists (System.String path) [0x00000]

at System.IO.File.Delete (System.String path) [0x00000]

at Test.Main (System.String[] args) [0x00000]

一个目录 请输入要删除的文件名: /

错误: System.UnauthorizedAccessException: / is a directory

at System.IO.File.Delete (System.String path) [0x00000]

at Test.Main (System.String[] args) [0x00000]

没有权限的文件 请输入要删除的文件名: /etc/passwd

错误: System.UnauthorizedAccessException: Access to the path "/etc/passwd" is denied.

at System.IO.File.Delete (System.String path) [0x00000]

at Test.Main (System.String[] args) [0x00000]

正在使用的文件 请输入要删除的文件名: test.exe

File.Delete 成功

只读文件 请输入要删除的文件名: readonly.file

File.Delete 成功

不存在的文件 请输入要删除的文件名: none.file

File.Delete 成功

正常的文件 请输入要删除的文件名: readwrite1.file

File.Delete 成功

几点说明:

1. 在上面的表格中,加粗的黑色文字是将程序中的“ex.ToString()”替换为“ex.Message”时显示的内容,这正是我们平常显示错误信息的方法。但是表格中的“零长度字符串”和“非法字符”的情况下错误信息只有“path”,这对用户来说是非常不友好的。在 Windows 操作系统中,对应的错误信息分别是:“路径的形式不合法”和“路径中具有非法字符”。

2. 我使用的 Linux 操作系统中文件名的允许最大长度是 255 个字符,而在 Windows XP Professional SP2 和 Windows Server 2003 SP2 中分别是 251 和 248 个字符。

3. 在 Linux 操作系统中,不能作为目录名使用的字符只有(‘\0‘)这么一个。不能作为文件名使用的字符只有(‘\0‘)和(‘/‘)两个。而在基于 Windows 的桌面平台上,无效路径字符可能包括从 1 到 31 的 ASCII/Unicode 字符,以及引号 (")、小于号 (<)、大于号 (>)、管道符号
(|)、退格 (\b)、空 (\0) 和制表符 (\t)。

4. 从上面的表格中可以看到:“正在使用的文件”和“只读文件”也可以被 File.Delete 方法成功删除。

下面使用 Linux 操作系统的“rm”命令的情况:

[email protected]:~/work$ ls -l readwrite1.file

-rw-r--r-- 1 ben ben 23 2007-09-02 13:56 readwrite1.file

[email protected]:~/work$ rm readwrite1.file

[email protected]:~/work$ ls -l readwrite1.file

ls: readwrite1.file: No such file or directory

[email protected]:~/work$

[email protected]:~/work$ ls -l readonly.file

-r--r--r-- 1 ben ben 1624 2007-09-02 13:57 readonly.file

[email protected]:~/work$ rm readonly.file

rm: remove write-protected regular file `readonly.file‘? y

[email protected]:~/work$ ls -l readonly.file

ls: readonly.file: No such file or directory

[email protected]:~/work$

[email protected]:~/work$ ls -l /etc/passwd

-rw-r--r-- 1 root root 1168 2007-08-09 14:33 /etc/passwd

[email protected]:~/work$ rm /etc/passwd

rm: remove write-protected regular file `/etc/passwd‘? y

rm: cannot remove `/etc/passwd‘: Permission denied

[email protected]:~/work$ ls -l /etc/passwd

-rw-r--r-- 1 root root 1168 2007-08-09 14:33 /etc/passwd

[email protected]:~/work$

可以看出,使用“rm”命令删除只读文件时会提问用户是否确实需要删除该文件。虽然 File.Delete 方法无法提问用户是否确实需要删除只读文件,但也不能就不声不响地把只读文件给删除了,而应该引发异常才对。

总的说来,mono 还是非常成功的,Windows 操作系统很多 .NET 程序直接拷贝到 Linux 下用 mono 就可以直接运行,不用重新编译。虽然说她还有这样那样的小问题,但瑕不掩瑜,并且她还在不断进步当中。

版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载。

时间: 2024-12-25 11:49:25

Linux 操作系统下 File.Delete 的表现的相关文章

Linux操作系统下Oracle主要监控工具介绍

Oracle监控包括有效且完全地监控Oracle数据库的性能.可用性和使用率等统计量,还包括即时的错误通知和纠正措施,并提供全面的报表和图表.本文中主要介绍几种Linux操作系统下Oracle主要监控工具. top top命令可实时地显示Linux系统的进程.CPU.内存.负载等的信息.它是我们了解系统整体状态最好的工具. top命令的运行状态是一个实时的显示过程,我们可在这个界面监控系统运行情况.我们可通过几个按键来控制top命令,如按q可退出top命令状态,按s可输入信息的更新频率等.这些命

Linux操作系统下MySQL的安装 --转

转自:http://www.cnblogs.com/mjorcen/p/4000371.html 注:另外的网址参考:http://www.linuxidc.com/Linux/2015-01/112583.htm 在Linux操作系统下,安装MYSQL有两种方式: 一种tar安装方式, 另外一种是rpm安装方式. 这两种安装方式有什么区别呢?尽管我们在Linux下常用tar来压缩/解压缩文件,但MYSQL的tar格式的文件其实只是mysql的文件包,并不能直接安装,需要操作configure.

为什么网络银行不支持GNU/Linux操作系统下的浏览器操作

当年Linux没出时,银行就开始信息化建设了. 所为信息化,就是指用计算机工作了.服务客户了. 顺带着,慢慢的建服务器,连网(内部网).外网(网上银行) 这样下来, unix, dos, win nt, Win ** 经过这么多年的发展.一套系统或多套系统已经建成了. 现在想改为前端支持 Linux ,就像让微软把 IE 6, 7, 8, 9, 10, 支持好 w3c 的网络标准一样困难. 几乎是不可能的. 但也不是没有办法的.我想到的有二 一,等现在的软件寿命到期,如同等 IE 6, 7, 8

linux操作系统下完全删除oracle数据库

1.关掉oracle server 和 background processes ps -ef | grep ora 关掉数据库 shutdown immediate 2.关掉监听 lsnrctl  status 如果开启的话就执行lsnrctl stop 关掉 3.把$ORACLE_HOME下面的文件删掉 用dbca图形界面把数据库删掉 4.把/usr/local/bin 下的三个文件夹 dbhome oraenv coraenv删掉 rm -f dbhome  rm -f oraenv  r

这些Linux操作系统下C语言编程注意事项,你都注意到了吗?

以下这些Linux操作系统下C语言编程注意事项,你都注意到了吗? 1工具的使用 1.学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑具,不光要学会用它们编辑源码,还要学会用它们进行查找.定位.替换等.新手的话推荐使用vim,这也是我目前使用的文本编辑器. 2.学会makefile文件的编写规则,并结合使用工具aclocal.autoconf和automake生成makefile文件. 3.掌握gcc和gdb的基本用法.掌握gcc的用法对于构建一个软件包很有益处,当软件

Linux 操作系统下,安装软件 apt-get、yum 的区别

Linux 操作系统主要分为两大类: RedHat系列:Redhat.Centos.Fedora等: Debian系列:Debian.Ubuntu等. yum(Yellow dog Updater, Modified)是 RedHat 系列 Linux 操作系统下的软件安装方式. apt-get(apt:Advanced Packaging Tool)是 Ubuntu 下的一个软件安装方式,它是基于 Debian 的. 原文地址:https://www.cnblogs.com/cag2050/p

121. 请简要说明linux操作系统下你所了解的文件存储方案

请简要说明linux操作系统下你所了解的文件存储方案 RPM包安装 如何解决依赖性关系 Linux系统下有几种安装方式及卸载方式 你了解linux内核调优吗?请介绍下调优的原则及相关参数 当linux操作系统中没有/etc/sysconfig/iptables文件时,如何恢复. 在什么条件下可以用"service 服务名 start|stop"启动服务? 请列举出常用的系统工具,如网络测试.io性能测试 系统检测方式等 请简要说明nagios监控远程服务器的原理或示意图. 请说明LVS

linux 操作系统下c语言编程入门

2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具介绍 1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编

【Linux】LINUX操作系统下VIM的安装和配置

vim是从VI发展而来的一个文本编辑器,功能更强大.而vim.tiny是vim的精简版,所以,安装vim势在必行.同时Windows下程序员很多都很喜欢Source Insight这个工具来看代码,各种语法高亮看着很舒服.vim作为为程序员打造的编辑器,没有道理不可以通过配置让程序员舒服地编辑代码,但是新手通常很难将其配置成顺手顺眼的环境.下面的方法可以通过极其简单的方式把vim配置得跟Source Insight一样炫. 一.安装环境: LINUX操作系统(ubuntu/Centos) 二.v