在過去的一個小時里,我一直在試圖弄清楚如何在 C 中以編程方式顯示文本檔案。
以下是簡單的 main.cpp 代碼,我在其中創建了一個目錄“Profiles”,并在其中創建了另一個目錄“TestProfile”。在 Profiles/TestProfile 中,我創建了一個“TestFile”并將“Test data”寫入其中。
#include <iostream>
#include <fstream>
#include <sys/stat.h>
#include "Profile.hpp"
#include <stdlib.h>
using namespace std;
int main(int argc, const char * argv[]) {
ofstream fs;
mkdir("/Users/dario/Desktop/Profiles", S_IRWXU);
mkdir("/Users/dario/Desktop/Profiles/TestProfile", S_IRWXU);
fs.open("/Users/dario/Desktop/Profiles/TestProfile/TestFile");
fs << "Test data\n";
string path = "/Users/dario/Desktop/Profiles/TestProfile/TestFile";
system(path.c_str());
return 0;
}
直到第 30 行的所有內容都按預期作業。目錄在那里,并且“TestFile”與寫入的資料一起出現。

編譯時沒有出現錯誤,但是 ./a.out 給了我一個權限被拒絕
darios-mbp:FMES dario$ g -std=c 2a main.cpp
darios-mbp:FMES dario$ ./a.out
sh: /Users/dario/Desktop/Profiles/TestProfile/TestFile: Permission denied
我嘗試了幾種方法。
首先,我使用ls -l檢查了文本檔案的權限,它回傳-rw-r--r--,所以我使用chmod 755。然后,檔案權限說-rwxr-xr-x。運行相同的代碼時, ./a.out 沒有回傳權限被拒絕,并且似乎可以正常作業,但是沒有打開文本檔案。
其次,在第一種方法不起作用后,我洗掉了目錄和 ./a.out 以重新創建原始權限被拒絕問題。
我像以前一樣被拒絕了權限,這次我嘗試更改所有權或目錄。
sh: /Users/dario/Desktop/Profiles/TestProfile/TestFile: Permission denied
darios-mbp:FMES dario$ chown -R $USER
/Users/dario/Desktop/Profiles/TestProfile/TestFile
darios-mbp:
該命令有效,但盡管沒有錯誤,但運行代碼仍然沒有執行任何操作。
我嘗試了 chmod 755,但再次沒有打開檔案。
在以前解決此問題的嘗試中,在以我剛剛解釋的相同方式更改所有權后,我什至在嘗試將文本檔案的第一個單詞作為命令運行時出現錯誤
Line 1: Test: command not found
雖然我在寫這篇文章時無法重新創建它。
也許我做錯了什么,但在寫這篇文章之前,我盡可能多地在網上尋找解決方案。他們似乎都沒有作業。也許我的情況在某種程度上是獨一無二的,這里有人可以幫助我指出正確的方向。如果我的帖子不符合標準,我提前道歉(如果是這樣,請告訴我如何改進下次的問題)。h
我在 xcode 上運行代碼
編輯
感謝@Codo 的回答,下面的編輯做了我想要的
string path = "/Users/dario/Desktop/Profiles/TestProfile/TestFile";
string cmd = "open -a TextEdit ";
system(cmd.c_str());
uj5u.com熱心網友回復:
我了解到您想使用適當的應用程式打開創建的檔案。假設檔案是/dir/file?? .
要從命令列/終端打開檔案,您將運行:
open /dir/file
或者,如果您想要特定的應用程式:
open -a TextEdit /dir/file
另請參閱macOS 打開命令。
如果你只是運行:
/dir/file
您將執行該檔案。這可能不是你想要的。并且只有當檔案滿足某些標準(如執行權限)并且在 shell 腳本的情況下具有適當的標頭時,才可能執行。
在 C 中,該system()函式執行在命令列(在終端中)有效的命令。
因此,要修復您的程式,請將行更改system()為:
string cmd = "open -a TextEdit ";
cmd = path;
system(cmd.c_str());
對于您的下一個問題:將代碼粘貼為文本,而不是影像:為什么在提問時不上傳代碼/錯誤的影像?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/427989.html
上一篇:如何在macOS虛擬機上禁用SIP以在CI/CD環境中進行macOSUI測驗?
下一篇:自制水龍頭和木桶的問題
