การดำเนินงานไฟล์ 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 คงเป็นเท็จ) นั่นคือไม่ว่าจะเป็นไฟล์ว่างเปล่า |