main_windows.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //go:build windows
  2. package yu_file
  3. import (
  4. yu_fast "gogs.qqck.cn/s/tools/fast"
  5. yu_sys "gogs.qqck.cn/s/tools/sys"
  6. )
  7. // Get
  8. //
  9. // @Description: 独占方式(多线程安全)读文件
  10. // @param name 文件路径
  11. func Get(name string) (result []byte) {
  12. j_fd := Openfile(name, yu_sys.GENERIC_READ, yu_sys.FILE_SHARE_NO, yu_sys.OPEN_EXISTING, 0)
  13. if j_fd == 0 {
  14. return
  15. }
  16. defer yu_sys.CloseHandle.Call(j_fd)
  17. j_size, j_ok := getFileSizeEx(j_fd)
  18. if !j_ok {
  19. return
  20. }
  21. if j_size == 0 {
  22. return
  23. }
  24. return readFileSize(j_fd, int(j_size))
  25. }
  26. // GetS
  27. //
  28. // @Description: 独占方式(多线程安全)读文件
  29. // @param name 文件路径
  30. func GetS(name string) string {
  31. return string(Get(name))
  32. }
  33. // Set
  34. //
  35. // @Description: 独占方式(多线程安全)写文件
  36. // @param name 文件路径
  37. // @param bufs 写出内容...
  38. func Set(name string, bufs ...[]byte) bool {
  39. j_fd := Openfile(name, yu_sys.GENERIC_WRITE, yu_sys.FILE_SHARE_NO, yu_sys.CREATE_ALWAYS, yu_sys.FILE_FLAG_WRITE_THROUGH)
  40. if j_fd == 0 {
  41. return false
  42. }
  43. defer yu_sys.CloseHandle.Call(j_fd)
  44. for j_i := 0; j_i < len(bufs); j_i++ {
  45. if !writeFile(j_fd, bufs[j_i]) {
  46. return false
  47. }
  48. }
  49. return true
  50. }
  51. // SetS
  52. //
  53. // @Description: 独占方式(多线程安全)写文件
  54. // @param name 文件路径
  55. // @param bufs 写出内容...
  56. func SetS(name string, bufs ...string) bool {
  57. j_fd := Openfile(name, yu_sys.GENERIC_WRITE, yu_sys.FILE_SHARE_NO, yu_sys.CREATE_ALWAYS, yu_sys.FILE_FLAG_WRITE_THROUGH)
  58. if j_fd == 0 {
  59. return false
  60. }
  61. defer yu_sys.CloseHandle.Call(j_fd)
  62. for j_i := 0; j_i < len(bufs); j_i++ {
  63. if !writeFile(j_fd, yu_fast.S2B(bufs[j_i])) {
  64. return false
  65. }
  66. }
  67. return true
  68. }
  69. // Put
  70. //
  71. // @Description: 独占方式(多线程安全)追加文件数据
  72. // @param name 文件路径
  73. // @param bufs 写出内容...
  74. func Put(name string, bufs ...[]byte) bool {
  75. j_fd := Openfile(name, yu_sys.FILE_APPEND_DATA, yu_sys.FILE_SHARE_NO, yu_sys.OPEN_ALWAYS, yu_sys.FILE_FLAG_WRITE_THROUGH)
  76. if j_fd == 0 {
  77. return false
  78. }
  79. defer yu_sys.CloseHandle.Call(j_fd)
  80. for j_i := 0; j_i < len(bufs); j_i++ {
  81. if !writeFile(j_fd, bufs[j_i]) {
  82. return false
  83. }
  84. }
  85. return true
  86. }
  87. // PutS
  88. //
  89. // @Description: 独占方式(多线程安全)追加文件数据
  90. // @param name 文件路径
  91. // @param bufs 写出内容...
  92. func PutS(name string, bufs ...string) bool {
  93. j_fd := Openfile(name, yu_sys.FILE_APPEND_DATA, yu_sys.FILE_SHARE_NO, yu_sys.OPEN_ALWAYS, yu_sys.FILE_FLAG_WRITE_THROUGH)
  94. if j_fd == 0 {
  95. return false
  96. }
  97. defer yu_sys.CloseHandle.Call(j_fd)
  98. for j_i := 0; j_i < len(bufs); j_i++ {
  99. if !writeFile(j_fd, yu_fast.S2B(bufs[j_i])) {
  100. return false
  101. }
  102. }
  103. return true
  104. }