linux 下如何读一个文本文件?要求有代码和注释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 下如何读一个文本文件?要求有代码和注释相关的知识,希望对你有一定的参考价值。

<?php
$MAXIMUM_FILESIZE = 1024 * 200; // 200KB
//设定最大上传大小 200kb
$MAXIMUM_FILE_COUNT = 10; // keep maximum 10 files on server
//最多个数
$UPLOAD_TREE_PARAM = 'GetTree';
//以下几个是“猜测”的,毕竟我也不知道源码的目录结构哈,见谅
//TREE参数
$UPLOAD_FILE_PARAM = 'FileName';
//FILE
$UPLOAD_PATH_PARAM = 'FilePath';
//PATH
$UPLOAD_DIRECTORY = 'images/';
//应是图片存储路径(相对的)
$REMOVE_PATH_PARAM = 'RemovePath';
//REMOVE_PATH
$domain=''.$_SERVER['HTTP_HOST'];
//网站域名(一般表示类似与***.com这个东西)
if(isset($_FILES[$UPLOAD_FILE_PARAM]))
//如果$UPLOAD_FILE_PARAM被设定了---前面设定了的
if($_FILES[$UPLOAD_FILE_PARAM]['size'] <= $MAXIMUM_FILESIZE)
//如果客户端上传的图片大小小于或等于MAXIMUM_FILESIZE(限定尺寸)
$path = $_GET[$UPLOAD_PATH_PARAM];
//$path为从客户端获取的$UPLOAD_PATH_PARAM变量的值
$path = preg_replace("#^$UPLOAD_DIRECTORY#", '', $path);
//对$path处理使之匹配 "#^$UPLOAD_DIRECTORY#"---- 具体是什么,我也不是
//很清楚 哈,我对正则不是很了解
$path = $UPLOAD_DIRECTORY.$path;
//让$path的值为"完整"的如:"images/ttt.jpg"
move_uploaded_file($_FILES[$UPLOAD_FILE_PARAM]['tmp_name'],
$path.$_FILES[$UPLOAD_FILE_PARAM]['name']);
//上传。通过函数move_uploaded_file函数上传,
//其中$_FILES[$UPLOAD_FILE_PARAM]['tmp_name']为,你上传客户端的那个
//text文本框里的东西
//$path.$_FILES[$UPLOAD_FILE_PARAM]['name']),这个是你上传后名字

//应该哪里有个路径,估计是我没看到。呵呵

elseif(isset($_GET[$UPLOAD_TREE_PARAM]))
//如果$_GET[$UPLOAD_TREE_PARAM存在----应该是后台设定的目录存储树了吧

$xml = '<?'.'xml version="1.0" encoding="utf-8"'.'?>';
$xml .=getFileXmlTree($UPLOAD_DIRECTORY);
echo $xml;

//上面三个表示输出xml文件头
elseif(isset($_GET[$REMOVE_PATH_PARAM]))
//继续判断$_GET[$REMOVE_PATH_PARAM它的存在
$path = $_GET[$REMOVE_PATH_PARAM];
//上面写过这东西,就不写了
$path = preg_replace("#^$UPLOAD_DIRECTORY#", '', $path);
$path = $UPLOAD_DIRECTORY.$path;
logData('remove '.$path);
//哦,不清楚这个不好意思
removeFile($path);
else echo file_get_contents('flexrtf.html');

function removeFile($path)
if(is_dir($path))
//如果存在$path这个目录

$dir = opendir($path);
//则打开,句柄指向$dir
while($file = readdir($dir))
//如果$file---表示读取$dir正确
//则
if($file=='.'||$file=='..')continue;
//上面表示在$file中只有".",或".."
//也就是,不会让目录转换出错,---下面那个就是去掉斜杠
if(is_dir($path.$file))removeFile($path.$file.'/');
else @unlink($path.$file); //

closedir($dir); //关闭

下面差不多都是和上面有类似的了。不写了,好累哦。。。
@rmdir($path);
else @unlink($path);

function getFileXmlTree($path)
global $domain;
$label = split('/', preg_replace('/\/+$/','',$path));
$label = $label[sizeof($label)-1];

$xmlDirs = '';
$xmlFiles = '';
$dir = opendir($path);
while($file = readdir($dir))
if($file=='.'||$file=='..')continue;
if(is_dir($path.$file))$xmlDirs.=getFileXmlTree($path.$file.'/');
else $xmlFiles.='<node label="'.$file.'" path="'.($path).'" url="'.$domain.'/flexrtf/'.($path.$file).'" size="'.filesize($path.$file).'"/>';

closedir($dir);
return '<node label="'.$label.'" path="'.$path.'" isBranch="true">'.$xmlDirs.$xmlFiles.'</node>';

function logData($msg)
$fp = fopen('./data.txt', 'a');
fwrite($fp, $msg."\n");
fclose($fp);

参考技术A 下面是读取一个文件 并复制成新文件

#include <string.h>
#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024

int main(int argc, char **argv)

FILE *from_fd;
FILE *to_fd;
long file_len = 0;
char buffer[BUFFER_SIZE];
char *ptr;

//判断传入参数
if(argc != 3)

printf("Usage: %s fromfile tofile", argv[0]);
exit(1); //异常退出返回1


//打开原文件
if((from_fd = fopen(argv[1], "rb")) == NULL)

printf("Read %s Error\n", argv[1]);
exit(1);


//创建目的文件
if((to_fd = fopen(argv[2], "wb")) == NULL)

printf("Write %s Error\n", argv[2]);
exit(1);


//侧得文件大小
fseek(from_fd, 0L, SEEK_END);
file_len = ftell(from_fd);
fseek(from_fd, 0L, SEEK_SET);
printf("from file size is = %ld\n", file_len);

//进行文件拷贝
while(!feof(from_fd))

fread(buffer, BUFFER_SIZE, 1, from_fd);
//fread 为c标准库里函数 // read 为Linux系统调用, 返回成功读取了多少字节 出错则返回-1
if(BUFFER_SIZE >= file_len)

fwrite(buffer, file_len, 1, to_fd);

else

fwrite(buffer, BUFFER_SIZE, 1, to_fd);
file_len = file_len - BUFFER_SIZE;
printf("copy success!\n");

bzero(buffer, BUFFER_SIZE);

fclose(from_fd);
fclose(to_fd);
exit(0); //返回0 表示成功
追问

什么时候一个程序中可以同时打开多个文件?应该注意什么问题?

追答

一个进程可以打开多个文件的
而且 打开的文件操作符从3开始
最多打开多少个文件 我也没查阿
看看系统调用吧

本回答被提问者采纳

C 代码更改终端文本颜色;如何恢复默认值? Linux

【中文标题】C 代码更改终端文本颜色;如何恢复默认值? Linux【英文标题】:C code changes terminal text color; how can I restore defaults? Linux 【发布时间】:2011-03-31 04:59:38 【问题描述】:

我有一个在 Linux 上运行的 C 文件。它以红色(失败)和绿色(通过)打印一些行。如您所料,它在 printf 语句中使用如下转义码:

#define BLACK  "\033[22;30m"
#define GREEN  "\033[22;31m"

printf(GREEN "this will show up green" BLACK "\n");

如果末尾的黑色不存在,则终端文本将继续为绿色。如果您没有抓住它,这对于具有非黑色背景的终端窗口来说很好,但否则您最终会得到黑底黑字。不好!运行程序会出现这个问题,捕获文本文件中的输出然后用“more”或“less”查看文件也是如此。

是否有恢复默认值而不是在 printf 语句末尾指定颜色的代码?这需要在 C 中,但我有兴趣阅读其他方法。


我更新了我的宏如下(注 31 为红色):

#define RESET_COLOR "\e[m"
#define MAKE_GREEN "\e[32m"

printf(MAKE_GREEN "this will show up green" RESET_COLOR "\n");

我发现以下链接有助于理解这些代码的工作原理:

http://www.phwinfo.com/forum/comp-unix-shell/450861-bash-shell-escapes-not-working-via-putty-ssh.html 解释了这些转义序列的作用,并在需要可移植性时使用ncurses。

http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-6.html

ANSI codes 显示了更多的转义序列;大局观很有用

【问题讨论】:

第一个链接(实际上)已损坏(域未续订)。第二个链接已损坏(超时)。 【参考方案1】:

尝试使用:

#define RESETCOLOR "\033[0m"

这应该将其重置为默认值。

关于这些终端代码的更多信息可以在ANSI escape code中找到。

【讨论】:

【参考方案2】:
"\033[0m"

ANSI escape code

【讨论】:

【参考方案3】:

在终端输入reset

在 Linux 和 OS X 中有一个名为 reset 的二进制文件。

【讨论】:

好吧,不是确切的答案,但也许看看它会有所帮助。 "reset" 清除终端窗口,将提示放在屏幕顶部,这不是我需要的效果,但谢谢。

以上是关于linux 下如何读一个文本文件?要求有代码和注释的主要内容,如果未能解决你的问题,请参考以下文章

如何在C++中 统计多行文本中的行数、单词数及字符数

如何编辑 300 GB 的文本文件(基因组数据)?

编程实现类似Linux下cp功能

要求用Windows下批处理和Linux下的shell脚本完成,两文本交替输出

python 插入文本 详见问题补充

maven项目只能读到绝对路径下的文件,读不到相对路径下的文件