- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这个项目之前是用eclipse搭建的,可以顺利运行。现在我已经将它导入到 android studio 中,它给了我一些错误。我尝试为我的项目清理、重建、使缓存无效/重新启动并与 Gradle 文件同步。但是,这些都不适合我。我的 MainActivity.java 中的代码“cropImageView.getEdge()”和“cropImageView.getCircleData()”也出现错误。我不确定 cropper 库是否有问题。有谁知道哪里出了问题?
This is the error I have gotten
我的 MainActivity.java:
public class MainActivity extends AppCompatActivity {
static Uri outPutfileUri;
public String filepath = "";
public static CropImageView cropImageView;
public static final int CAMERA_IMAGE =2;
public static final int GALLERY_CHOOSER_INTENT = 3;
public static final int GALLERY_KITKAT_INTENT_CALLED= 4;
public static Bitmap activeBmp;
public static Bitmap originalBmp;
private static final int DEFAULT_ASPECT_RATIO_VALUES = 10;
private static final String ASPECT_RATIO_X = "ASPECT_RATIO_X";
private static final String ASPECT_RATIO_Y = "ASPECT_RATIO_Y";
private int mAspectRatioX = DEFAULT_ASPECT_RATIO_VALUES;
private int mAspectRatioY = DEFAULT_ASPECT_RATIO_VALUES;
ImageView croppedImageView;
File file;
ImageButton btImage,btCrop,btProceed;
CroppingInstructionDlg dialog;
CheckBox cb_savePreferencedialog;
public static final String Save_CheckboxSettingdialog = "MyCheckBoxSettingdialogforcroppingactivity";
boolean checkedCheckboxdialog=false;
Bitmap croppedImage;
boolean cropped=false;
// this is very important to use the navtive opencv's library
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
Log.d("ERROR", "Unable to load OpenCV");
}
else
{
Log.d("SUCCESS", "OpenCV loaded");
}
}
@Override
protected void onRestoreInstanceState(Bundle bundle) {
super.onRestoreInstanceState(bundle);
mAspectRatioX = bundle.getInt(ASPECT_RATIO_X);
mAspectRatioY = bundle.getInt(ASPECT_RATIO_Y);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SharedPreferences sp = getSharedPreferences("activities", MODE_PRIVATE);
dialog = new CroppingInstructionDlg(MainActivity.this);
cb_savePreferencedialog = (CheckBox)dialog.findViewById(R.id.cb_savePreferencedialog);
SharedPreferences prefEditdialog = getSharedPreferences(Save_CheckboxSettingdialog, MODE_PRIVATE);
if(prefEditdialog.contains("CheckBoxValueDialog1")){
cb_savePreferencedialog.setChecked(true);
}
else
{
openDialoginstruction();
}
cropImageView = (CropImageView) findViewById(R.id.CropImageView);
croppedImageView = (ImageView) findViewById(R.id.croppedImageView);
cropImageView.setVisibility(View.GONE);
croppedImageView.setVisibility(View.GONE);
btImage=(ImageButton) findViewById(R.id.btImage);
btImage.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
List<String> data= new ArrayList<String>();
data.add("Import from local device.");
data.add("Take camera image.");
AdapterGetImage adapter = new AdapterGetImage(MainActivity.this);
adapter.setData(data);
new AlertDialog.Builder(MainActivity.this).setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//TODO - Code when list item is clicked (int which - is param that gives you the index of clicked item)
if (which==0) {
getFromGallery();
}
if(which==1)
{
getImageFromCamera();
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setCancelable(false)
.show();
}
});
btCrop=(ImageButton) findViewById(R.id.btCrop);
btCrop.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(cropImageView.getVisibility() == View.VISIBLE){
croppedImage = cropImageView.getCroppedImage();
//size test
// croppedImage = croppedImage.createScaledBitmap(croppedImage, activeBmp.getWidth(), ((activeBmp.getWidth() * activeBmp.getHeight()) / activeBmp.getWidth()), true);
croppedImageView.setVisibility(View.VISIBLE);
croppedImageView.setImageBitmap(croppedImage);
activeBmp = croppedImage;
globalVar.edgeData= cropImageView.getEdge();
globalVar.gatheredData= cropImageView.getCircleData();
cropped=true;
}
else
{
Toast.makeText(MainActivity.this, "Please select your desired image before using the cropping function.", Toast.LENGTH_LONG).show();
}
}
});
btProceed = (ImageButton)findViewById(R.id.btProceed);
btProceed.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(cropImageView.getVisibility() == View.VISIBLE){
if(cropped)
{
try {
InternalStorage.writeBitmap(MainActivity.this,"image", activeBmp);
InternalStorage.writeBitmap(MainActivity.this,"originalimage", originalBmp);
Intent intent = new Intent(MainActivity.this, EditImageActivity.class);
startActivity(intent);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
Toast.makeText(MainActivity.this, "Please crop your desired image before proceeding to the next step.", Toast.LENGTH_LONG).show();
}
}
else
{
Toast.makeText(MainActivity.this, "Please select your desired image before proceeding to the next step.", Toast.LENGTH_LONG).show();
}
}
});
if (savedInstanceState != null) {
// String savedText = savedInstanceState.getString(KEY_TEXT_VALUE);
if (!savedInstanceState.getString("filepath").equals("")) {
filepath = savedInstanceState.getString("filepath");
// mTextView.setText(savedText);
LoadPicture(filepath);
croppedImageView.setImageBitmap(globalVar.CroppedImage);
croppedImageView.setVisibility(View.VISIBLE);
cropImageView.setVisibility(View.VISIBLE);
}
}
}
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
bundle.putInt(ASPECT_RATIO_X, mAspectRatioX);
bundle.putInt(ASPECT_RATIO_Y, mAspectRatioY);
// if (!filepath.equals("")) {
if (filepath != null) {
bundle.putString("filepath", filepath);
} else {
bundle.putString("filepath", "");
}
if(cropped==true)
{
globalVar.CroppedImage= Bitmap.createBitmap(croppedImage);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if(id == R.id.About_Us)
{
openDialog();
}
return super.onOptionsItemSelected(item);
}
//cf code here
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == GALLERY_CHOOSER_INTENT) {
if (null == data) return;
String selectedImagePath;
Uri selectedImageUri = data.getData();
//MEDIA GALLERY
selectedImagePath = ImageFilePath.getPath(getApplicationContext(), selectedImageUri);
cropImageView.requestLayout();
LoadPicture(selectedImagePath);
cropImageView.setVisibility(View.VISIBLE);
}
if(requestCode ==CAMERA_IMAGE)
{
if (resultCode == Activity.RESULT_OK) {
cropImageView.requestLayout();
// if(!filepath.equals(""))
if (outPutfileUri.toString() != null) {
this.filepath=outPutfileUri.getPath();
LoadPicture(outPutfileUri.getPath());
cropImageView.setVisibility(View.VISIBLE);
}
}
}
} catch (Throwable ex) {
//Toast.makeText(MainActivity.this, ex.toString(), Toast.LENGTH_LONG).show();
}
}
public String getGalleryImagePath(Intent data) {
try {
Uri imgUri = data.getData();
String filePath = "";
if (data.getType() == null) {
// For getting images from default gallery app.
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(imgUri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();
} else if (data.getType().equals("image/jpeg")
|| data.getType().equals("image/png")) {
filePath = imgUri.getPath();
}
return filePath;
} catch (Exception e) {
return null;
}
}
private String getPath(Uri uri) {
if( uri == null ) {
return null;
}
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor;
if(Build.VERSION.SDK_INT >19)
{
// Will return "image:x*"
String wholeID = DocumentsContract.getDocumentId(uri);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, sel, new String[]{ id }, null);
}
else
{
cursor = getContentResolver().query(uri, projection, null, null, null);
}
String path = null;
try
{
int column_index = cursor
.getColumnIndex(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
path = cursor.getString(column_index).toString();
cursor.close();
}
catch(NullPointerException e) {
}
return path;
}
public String getCameraImagePath(Intent data) {
try {
Uri imgUri = data.getData();
String filePath = "";
if (data.getType() == null) {
// For getting images from default gallery app.
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(imgUri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();
} else if (data.getType().equals("image/jpeg")
|| data.getType().equals("image/png")) {
filePath = imgUri.getPath();
}
return filePath;
} catch (Exception e) {
return null;
}
}
public void LoadPicture(String filepath) {
if (!new File(filepath).exists()) {
Toast.makeText(this, "Image does not exist.", Toast.LENGTH_SHORT)
.show();
} else {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenwidth = size.x;
int screenheight = size.y;
int picwidth = 0;
if(screenwidth < screenheight)
{
picwidth = screenwidth;
}
else
{
picwidth = screenheight;
}
picwidth = (int) (0.8 * picwidth);
Bitmap img = decodeSampledBitmapFromResource(filepath, picwidth);
if (img.getWidth() < img.getHeight()) {
Bitmap rotatedbmp = RotateBitmap(img, 90);
img = rotatedbmp;
} else {
;
}
if (img.getWidth() > img.getHeight()) {
if (img.getWidth() > picwidth) {
cropImageView.getLayoutParams().height = picwidth
* img.getHeight() / img.getWidth();
cropImageView.getLayoutParams().width = picwidth;
img = Bitmap.createScaledBitmap(img, picwidth,
((picwidth * img.getHeight()) / img.getWidth()), true);
} else {
cropImageView.getLayoutParams().width = img.getWidth();
cropImageView.getLayoutParams().height = img.getHeight();
}
} else if (img.getHeight() > img.getWidth()) {
if (img.getHeight() > picwidth) {
cropImageView.getLayoutParams().height = picwidth;
cropImageView.getLayoutParams().width = picwidth
* img.getWidth() / img.getHeight();
img = Bitmap.createScaledBitmap(img,
((picwidth * img.getWidth()) / img.getHeight()), picwidth,
true);
} else {
cropImageView.getLayoutParams().width = img.getWidth();
cropImageView.getLayoutParams().height = img.getHeight();
}
} else {// same square image
if (img.getWidth() > picwidth) {
cropImageView.getLayoutParams().height = picwidth;
cropImageView.getLayoutParams().width = picwidth;
img = Bitmap.createScaledBitmap(img, picwidth, picwidth, true);
} else {
cropImageView.getLayoutParams().width = img.getWidth();
cropImageView.getLayoutParams().height = img.getHeight();
}
}
activeBmp = null;
activeBmp = img.copy(Bitmap.Config.ARGB_8888, true);
originalBmp=img.copy(Bitmap.Config.ARGB_8888, true);
//cropImageView.getLayoutParams().height = activeBmp.getHeight();
//cropImageView.getLayoutParams().width = activeBmp.getWidth();
cropImageView.setImageBitmap(activeBmp);
//croppedImageView.setImageBitmap(activeBmp);
img.recycle();
}//else ends
}
public static Bitmap decodeSampledBitmapFromResource(String filepath,int reqWidth) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filepath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filepath, options);
}
public static Bitmap RotateBitmap(Bitmap source, float angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(),
source.getHeight(), matrix, true);
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
// if (height > reqHeight || width > reqWidth) {
if (width > reqWidth) {
// final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and
// keeps both
// height and width larger than the requested height and width.
// while ((halfHeight / inSampleSize) > reqHeight
// && (halfWidth / inSampleSize) > reqWidth) {
while ((halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
public void openDialog() {
final AboutUsDlg dialog = new AboutUsDlg(this); // context, this etc.
dialog.setTitle("About Us");
Button btnClose = (Button) dialog.findViewById(R.id.btOk);
btnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
public void getFromGallery()
{
//cf code
/*
if (Build.VERSION.SDK_INT <23){
final Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, GALLERY_CHOOSER_INTENT);
} else {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED);
}
*/
final Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select File"),GALLERY_CHOOSER_INTENT);
//final Intent intent = new Intent();
//intent.setType("image/*");
//intent.setAction(Intent.ACTION_GET_CONTENT);
//startActivityForResult(intent, GALLERY_CHOOSER_INTENT);
}
public void getImageFromCamera()
{
Intent intent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(Environment.getExternalStorageDirectory(),
"APDColonyImage.jpg");
globalVar.CameraImage=file;
outPutfileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri);
startActivityForResult(intent, CAMERA_IMAGE);
}
public void openDialoginstruction() {
cb_savePreferencedialog.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//is chkIos checked?
if (((CheckBox) v).isChecked()) {
checkedCheckboxdialog=true;
}
else
{
checkedCheckboxdialog=false;
}
}
});
Button btnClose = (Button) dialog.findViewById(R.id.btOk);
btnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(checkedCheckboxdialog==true){
SharedPreferences.Editor CheckBoxEditor = getSharedPreferences(Save_CheckboxSettingdialog, MODE_PRIVATE).edit();
CheckBoxEditor.putBoolean("CheckBoxValueDialog1", checkedCheckboxdialog);
CheckBoxEditor.commit();
}
else
{
SharedPreferences.Editor CheckBoxEditor = getSharedPreferences(Save_CheckboxSettingdialog, MODE_PRIVATE).edit();
CheckBoxEditor.clear();
CheckBoxEditor.commit();
}
dialog.dismiss();
}
});
dialog.show();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// cleanup app, save preferences, etc.
exitApplication() ;
// finish(); // not working properly, especially not with asynchronous tasks running
// return moveTaskToBack(true);
return super.onKeyDown(keyCode, event);
}
public void exitApplication() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Are you sure you want to exit?")
// Write the code below
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
我的 activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal"
android:weightSum="3" >
<ImageButton
android:id="@+id/btImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/btCrop"
android:layout_weight="1"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/getimage_icon9" />
<ImageButton
android:id="@+id/btCrop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_weight="1"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/crop_icon9" />
<ImageButton
android:id="@+id/btProceed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btCrop"
android:layout_weight="1"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/next_icon9" />
</LinearLayout>
<TextView
android:id="@+id/tvCrop1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/Image"
android:textAppearance="?android:attr/textAppearanceLarge" />
<!--
<com.edmodo.cropper.CropImageView
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:id="@+id/CropImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
-->
<com.edmodo.cropper.CropImageView
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:id="@+id/CropImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
custom:imageResource="@drawable/emptyimage"/>
<TextView
android:id="@+id/tvCrop2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/Cropped_image"
android:textAppearance="?android:attr/textAppearanceLarge" />
<ImageView
android:id="@+id/croppedImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/emptyimage"
tools:ignore="ContentDescription" />
</LinearLayout>
</ScrollView>
最佳答案
只需清理构建并重新运行项目。它会自动解决问题
关于java - 无法解析 R 符号和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52250626/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!