Latest web development tutorials

การดำเนินงานไฟล์ Perl

Perl ใช้เทคนิคที่เรียกว่าจับไฟล์ตัวแปรในการทำงานชนิดของไฟล์

อ่านหรือเขียนข้อมูลจากไฟล์ต้องใช้ไฟล์จับ

การจัดการไฟล์ (จับไฟล์) เป็นชื่อของการเชื่อมต่อ I / O,

Perl ให้สามจับไฟล์: STDIN, STDOUT, STDERR เป็นตัวแทนเข้ามาตรฐานส่งออกมาตรฐานและการส่งออกข้อผิดพลาดมาตรฐาน

ไฟล์ Perl สามารถเปิดได้ในวิธีต่อไปนี้:

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

พารามิเตอร์คำอธิบาย:

  • filehandle: จัดการไฟล์ที่ใช้ในการเก็บรหัสเฉพาะสำหรับแฟ้ม
  • expr: ชื่อไฟล์และประเภทการเข้าถึงไฟล์ประกอบด้วยการแสดงออก
  • ประเภทการเข้าถึงไฟล์: โหมด
  • perms: การเข้าถึงบิต (ได้รับอนุญาตบิต)

เปิดฟังก์ชั่น

เราใช้ฟังก์ชั่นรหัสต่อไปนี้จะเปิดโหมดอ่านอย่างเดียว (<) เพื่อเปิด file.txt ไฟล์:

open(DATA, "<file.txt");

<ตัวแทนอ่านอย่างเดียว

รหัสการจัดการแฟ้มข้อมูลที่ใช้ในการอ่านไฟล์ตัวอย่างต่อไปนี้จะเปิดไฟล์และเนื้อหาของแฟ้มของการส่งออก:

#!/usr/bin/perl

open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";

while(<DATA>){
   print "$_";
}

รหัสต่อไปนี้จะเขียน (>) วิธีการเปิด file.txt ไฟล์:

open(DATA, ">file.txt") or die "file.txt 文件无法打开, $!";

> สำหรับโหมดการเขียน

หากคุณจำเป็นต้องเปิดไฟล์ในโหมดอ่านเขียนในด้านหน้า> หรือ <ตัวละคร + เข้าสู่ระบบเพื่อเพิ่ม:

open(DATA, "+<file.txt"); or die "file.txt 文件无法打开, $!";

วิธีการนี้จะไม่ลบเนื้อหาไฟล์ต้นฉบับถ้าคุณต้องการที่จะลบรูปแบบดังนี้

open DATA, "+>file.txt" or die "file.txt 文件无法打开, $!";

หากคุณต้องการที่จะยื่นข้อมูลเพิ่มเติมข้อมูลเพิ่มเติมก่อนที่คุณจะต้องเปิดไฟล์ในโหมดผนวก:

open(DATA,">>file.txt") || die "file.txt 文件无法打开, $!";

>> แสดงผนวกข้อมูลไปยังไฟล์ที่มีอยู่ถ้าคุณจำเป็นต้องอ่านเนื้อหาของไฟล์ที่ผนวกการเพิ่มเครื่องหมาย +:

open(DATA,"+>>file.txt") || die "file.txt 文件无法打开, $!";

ตารางต่อไปนี้แสดงโหมดการเข้าถึงที่แตกต่างกัน

โหมด ลักษณะ
<หรือ R เปิดให้บริการสำหรับการอ่านเพียงแฟ้มชี้ไปที่ส่วนหัวของไฟล์
> หรือ W เปิดให้บริการสำหรับการเขียนแฟ้มชี้ไปที่ส่วนหัวของไฟล์และขนาดไฟล์ที่ถูกตัดให้เป็นศูนย์ ถ้าไฟล์ที่ไม่ได้อยู่พยายามสร้าง
>> หรือ เปิดให้บริการสำหรับการเขียนตัวชี้แฟ้มในตอนท้ายของแฟ้ม ถ้าไฟล์ที่ไม่ได้อยู่พยายามสร้าง
+ <หรือ R + เปิดให้บริการสำหรับการอ่านและการเขียนตัวชี้ไฟล์ไปยังส่วนหัวของไฟล์
+> หรือ + W เปิดให้บริการสำหรับการอ่านและการเขียนตัวชี้ไฟล์ไปยังส่วนหัวของไฟล์และขนาดไฟล์ที่ถูกตัดให้เป็นศูนย์ ถ้าไฟล์ที่ไม่ได้อยู่พยายามสร้าง
>> + หรือ A + เปิดให้บริการสำหรับการอ่านและการเขียนตัวชี้แฟ้มในตอนท้ายของแฟ้ม ถ้าไฟล์ที่ไม่ได้อยู่พยายามสร้าง

ฟังก์ชั่น sysopen

ฟังก์ชั่นsysopen จะคล้ายกับการเปิดฟังก์ชั่น แต่พวกเขาไม่ได้เป็นรูปแบบเดียวของการโต้แย้ง

ตัวอย่างต่อไปนี้จะขึ้นอยู่กับการอ่านและการเขียน (+ <ชื่อไฟล์) วิธีการเปิดไฟล์:

sysopen(DATA, "file.txt", O_RDWR);

หากคุณจำเป็นต้องปรับปรุงแฟ้มอบก่อนที่ไฟล์จะถูกเขียนดังนี้

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

คุณสามารถใช้ O_CREAT ในการสร้างไฟล์ใหม่โหมด O_WRONLY เขียนเท่านั้น O_RDONLY โหมดอ่านอย่างเดียว

พารามิเตอร์ perms มูลค่าทรัพย์สินแปดบ่งชี้ว่าสิทธิ์ของแฟ้มหลังจากการสร้างเริ่มต้นคือ 0x666

ตารางต่อไปนี้แสดงค่าโหมดเป็นไปได้:

โหมด ลักษณะ
O_RDWR เปิดให้บริการสำหรับการอ่านและการเขียนตัวชี้ไฟล์ไปยังส่วนหัวของไฟล์
O_RDONLY เปิดให้บริการสำหรับการอ่านเพียงแฟ้มชี้ไปที่ส่วนหัวของไฟล์
O_WRONLY เปิดให้บริการสำหรับการเขียนแฟ้มชี้ไปที่ส่วนหัวของไฟล์และขนาดไฟล์ที่ถูกตัดให้เป็นศูนย์ ถ้าไฟล์ที่ไม่ได้อยู่พยายามสร้าง
O_CREAT สร้างไฟล์
O_APPEND ผนวกไฟล์
O_TRUNC ขนาดไฟล์ที่ถูกตัดให้เป็นศูนย์
O_EXCL หากคุณกำลังใช้ไฟล์ O_CREAT ที่มีอยู่ก็จะส่งกลับข้อผิดพลาดก็สามารถทดสอบว่าไฟล์ที่มีอยู่
O_NONBLOCK ไม่ปิดกั้นการดำเนินงานของ I / O เพื่อที่เราจะประสบความสำเร็จหรืออย่างใดอย่างหนึ่งได้ทันทีกลับข้อผิดพลาดไม่ถูกปิดกั้น

ปิดฟังก์ชั่น

หลังจากการใช้งานในแฟ้มปิดไฟล์ที่คุณต้องการที่จะฟื้นฟู input และ output บัฟเฟอร์จัดการแฟ้มที่เกี่ยวข้องกับการปิดไฟล์มีไวยากรณ์ต่อไปนี้:

close FILEHANDLE
close

filehandle สำหรับการจัดการไฟล์ที่ระบุหากประสบความสำเร็จปิดผลตอบแทนที่แท้จริง

close(DATA) || die "无法关闭文件";

การอ่านและการเขียนไฟล์

อ่านและเขียนข้อมูลไปยังแฟ้มมีวิธีการที่แตกต่างกัน ได้แก่ :

<FILEHANDL> ผู้ประกอบการ

วิธีการหลักของการอ่านข้อมูลจากด้ามเปิดแฟ้มเป็นผู้ดำเนินการ <filehandle> ในบริบทเกลาก็จะกลับเป็นเส้นเดียวจากการจัดการไฟล์ ตัวอย่างเช่น:

#!/usr/bin/perl

print "本教程网址?\n";
$name = <STDIN>;
print "网址:$name\n";

หลังจากการดำเนินการตามขั้นตอนข้างต้นข้อมูลต่อไปนี้เราจะเข้าสู่การส่งออกคำสั่งพิมพ์ URL นี้:

เมื่อเราใช้ <filehandle> ผู้ประกอบการซึ่งจะส่งกลับจัดการไฟล์สำหรับแต่ละแถวในรายการตัวอย่างเช่นเราสามารถนำเข้าทุกสายเพื่ออาร์เรย์

การดำเนินการสร้างแฟ้ม import.txt ดังต่อไปนี้:

$ cat import.txt 
1
2
3

Import.txt และอ่านแต่ละบรรทัดลงใน @lines อาร์เรย์:

#!/usr/bin/perl

open(DATA,"<import.txt") or die "无法打开数据";
@lines = <DATA>;
print @lines;    # 输出数组内容
close(DATA);

โปรแกรมข้างต้นผลลัพธ์คือ:

1
2
3

ฟังก์ชั่น GETC

ฟังก์ชั่น xgetc ผลตอบแทนที่เป็นตัวละครเดียวจาก filehandle ระบุถ้าคุณไม่ได้ระบุ STDIN ผลตอบแทน:

getc FILEHANDLE
getc

หากเกิดความผิดพลาดหรือการจัดการไฟล์ในตอนท้ายของไฟล์ที่จะส่งกลับ undef


อ่านฟังก์ชั่น

ฟังก์ชั่นอ่านจะใช้ในการจัดการกับข้อมูลที่อ่านได้จากบัฟเฟอร์ไฟล์

ฟังก์ชั่นนี้จะใช้ในการอ่านข้อมูลไบนารีจากแฟ้ม

read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH

พารามิเตอร์คำอธิบาย:

  • filehandle: จัดการไฟล์ที่ใช้ในการเก็บรหัสเฉพาะสำหรับแฟ้ม
  • SCALAR: เริ่มต้นการอ่านตำแหน่ง
  • ยาว: ความยาวของเนื้อหาอ่าน
  • OFFSET: ชดเชย

หากกลับประสบความสำเร็จในการอ่านจำนวนไบต์อ่านกลับ 0 ถ้าจุดสิ้นสุดของแฟ้มหากเกิดข้อผิดพลาดกลับมา undef

ฟังก์ชั่นการพิมพ์

สำหรับข้อมูลทั้งหมดจะถูกอ่านจากฟังก์ชั่นไฟล์จับที่ปลายด้านหลังของฟังก์ชั่นหลักคือการเขียนการพิมพ์:

print FILEHANDLE LIST
print LIST
print

ใช้ไฟล์และฟังก์ชั่นการพิมพ์สามารถจัดการกับผลของการทำงานกับเครื่องมือเอาต์พุต (STDOUT: ออกมาตรฐาน) ตัวอย่างเช่น:

print "Hello World!\n";

คัดลอกไฟล์

ตัวอย่างต่อไปนี้เราจะเปิดแฟ้ม file1.txt ที่มีอยู่และอ่านมันแต่ละบรรทัดเขียนไปยังแฟ้มใน file2.txt:

#!/usr/bin/perl

# 只读方式打开文件
open(DATA1, "<file1.txt");

# 打开新文件并写入
open(DATA2, ">file2.txt");

# 拷贝数据
while(<DATA1>)
{
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );

เปลี่ยนชื่อไฟล์

ตัวอย่างต่อไปนี้เราจะมีอยู่แล้วไฟล์ file1.txt เปลี่ยนชื่อ file2.txt ไดเรกทอรีที่ระบุไว้ใน / usr / w3big / ทดสอบ / ใต้:

#!/usr/bin/perl

rename ("/usr/w3big/test/file1.txt", "/usr/w3big/test/file2.txt" );

ฟังก์ชั่นเปลี่ยนชื่อยอมรับเฉพาะสองพารามิเตอร์เพียงไฟล์มีอยู่แล้วจะเปลี่ยนชื่อเป็น

ลบไฟล์

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีที่เราใช้ฟังก์ชั่นยกเลิกการเชื่อมโยงที่จะลบไฟล์นี้:

#!/usr/bin/perl

unlink ("/usr/w3big/test/file1.txt");

ระบุตำแหน่งไฟล์

คุณสามารถใช้ฟังก์ชั่นบอกจะได้รับตำแหน่งของแฟ้มและระบุตำแหน่งภายในแฟ้มโดยใช้ฟังก์ชั่นขอ:

บอกฟังก์ชั่น

บอกฟังก์ชั่นที่ใช้ในการได้รับการตั้งไฟล์:

tell FILEHANDLE
tell

ถ้า filehandle ฟังก์ชันจะคืนตำแหน่งของตัวชี้แฟ้มไบต์ ถ้าคุณไม่ได้ระบุกลับไปเริ่มต้นที่เลือกจับไฟล์

ขอฟังก์ชั่น

แสวงหา () ฟังก์ชั่นที่ใช้ในการย้ายผ่านแฟ้มจับการอ่านและเขียนคำแนะนำวิธีที่จะอ่านหรือเขียนไฟล์ในไบต์อ่านและเขียน:

seek FILEHANDLE, POSITION, WHENCE

พารามิเตอร์คำอธิบาย:

  • filehandle: จัดการไฟล์ที่ใช้ในการเก็บรหัสเฉพาะสำหรับแฟ้ม
  • ตำแหน่ง: ระบุจำนวนไบต์ของการจัดการแฟ้ม (อ่านเขียนตัวชี้ตำแหน่ง) ที่จะย้าย
  • WHENCE: หมายถึงจัดการไฟล์ (ตัวชี้สถานที่อ่านเขียน) เริ่มต้นเมื่อตำแหน่งเริ่มต้นคุณสามารถใช้ค่าเป็น 0, 1 หมายถึงจุดเริ่มต้นของไฟล์ตำแหน่งปัจจุบันและจุดสิ้นสุดของแฟ้ม

ตัวอย่างต่อไปนี้ในการอ่าน 256 ไบต์จากจุดเริ่มต้นของแฟ้ม:

seek DATA, 256, 0;

ข้อมูลไฟล์

การดำเนินงานไฟล์ Perl ยังสามารถทดสอบว่าไฟล์ที่มีอยู่และมีการอ่านและการเขียน

สิ่งที่ฉันสามารถสร้างไฟล์ file1.txt เช่นภายในต่อไปนี้:

$ cat file1.txt 
www.w3big.com
#/usr/bin/perl

my $file = "/usr/test/w3big/file1.txt";
my (@description, $size);
if (-e $file)
{
	push @description, '是一个二进制文件' if (-B _);
	push @description, '是一个socket(套接字)' if (-S _);
	push @description, '是一个文本文件' if (-T _);
	push @description, '是一个特殊块文件' if (-b _);
	push @description, '是一个特殊字符文件' if (-c _);
	push @description, '是一个目录' if (-d _);
	push @description, '文件存在' if (-x _);
	push @description, (($size = -s _)) ? "$size 字节" : '空';
	print "$file 信息:", join(', ',@description),"\n";
}

โปรแกรมข้างต้นผลลัพธ์คือ:

file1.txt 信息:是一个文本文件, 15 字节

ยื่นประกอบการทดสอบในตารางต่อไปนี้:

ผู้ประกอบการ ลักษณะ
-A ไฟล์ที่มีการเข้าถึงครั้งแรก (หน่วย: วัน)
-B ไม่ว่าจะเป็นไฟล์ไบนารี
-C ไฟล์ (ไอโหนด) inode เวลาแก้ไข (หน่วย: วัน)
-M แฟ้มสุดท้ายเวลาการปรับเปลี่ยน (หน่วย: วัน)
-O ไฟล์ทั้งหมดจะถูกโพสต์จริง
-R แฟ้มหรือไดเรกทอรีสามารถอ่านได้โดยโพสต์จริง / GID
-S ซ็อกเก็ต (Socket)
-T ไม่ว่าจะเป็นไฟล์ข้อความ
-W แฟ้มหรือไดเรกทอรีสามารถเขียนได้ไปโพสต์จริง / GID
-X ไฟล์หรือไดเรกทอรีสามารถดำเนินการได้จริง UID / GID
-b บล็อกพิเศษ (บล็อกพิเศษ) ไฟล์ (เช่นดิสก์ Mount)
-c ตัวละครพิเศษ (อักขระพิเศษ) ไฟล์ (เช่นอุปกรณ์ I / O)
-d ไดเรกทอรี
-e ไฟล์หรือชื่อไดเรกทอรีที่มีอยู่
-f ไฟล์สามัญ
-G แฟ้มหรือไดเรกทอรีมีแอตทริบิวต์ setgid
-k แฟ้มหรือไดเรกทอรีมี bit เหนียว
-l มันเป็นความเชื่อมโยงสัญลักษณ์
-o ไฟล์ทั้งหมดจะถูกโพสต์ที่ถูกต้อง
-p ไฟล์เป็นชื่อท่อ (FIFO)
-R ไฟล์ที่สามารถได้อย่างมีประสิทธิภาพ UID / GID อ่าน
-s แฟ้มหรือไดเรกทอรีที่มีอยู่และไม่ได้เป็น 0 (ส่งกลับจำนวนไบต์)
t- จับไฟล์ TTY (ฟังก์ชั่นระบบ isatty () ผลตอบแทนผล; ชื่อไฟล์ที่ไม่สามารถใช้การทดสอบนี้)
-u แฟ้มหรือไดเรกทอรีมีแอตทริบิวต์ setuid
-w ไฟล์ที่สามารถเขียนไปยังโพสต์ที่ถูกต้อง / GID
-x ไฟล์ที่สามารถดำเนินการได้อย่างมีประสิทธิภาพ UID / GID
-z ไฟล์ที่มีอยู่ขนาดของ 0 (directory คงเป็นเท็จ) นั่นคือไม่ว่าจะเป็นไฟล์ว่างเปล่า